0

考慮下面的Java代碼:如果語句優化 - 比較字符串常量VS布爾標誌

public void DoStuff(String[] strings, boolean preEval) 
{ 
    final String compareTo = "A Somewhat Long String of Characters"; 

    for (int i = 0; i < strings.length; ++i) 
    { 
     if (preEval) 
     { 
       if(strings[i].equals(compareTo)) 
       { 
        //do something process intensive 
       } 
     } 

     //do something process intensive 
    } 

} 

現在講究if (preEval)和內內聲明。如果正在使用的算法需要諸如preEval之類的條件,那麼爲了代碼優化的目的而包含preEval條件是否有意義?

從我的理解,評估,看是否有條件標誌解析爲真或假的比通過字符的集合迭代,並從不同的集合對應的其他字符集內每個字符比較快的多。

我組裝的知識是30%左右我會在內部和操作碼/參與助記符,因此爲什麼我問這個問題的方面說。

更新

注:這裏發佈的代碼,就是要語言無關的;我只是爲了一些有形且易於閱讀的東西而選擇Java,以及在程序員社區中廣爲人知的一些東西。

回答

0

成本更低的方法可能是使用一個HashSet ::包含(string)方法來檢查集合中的字符串的存在。您可以在使用字符串的HashSet或由String鍵入的HashMap進行迭代時設計掉字符串比較的需要。

我總是儘量使用HashMap,我可以完全避免的條件邏輯。

_ryan

+0

我可能已經澄清我沒有遇到Java或任何其他語言這個問題,它只是我很好奇 - 我認爲很可能是與語言無關的功能的東西,但更使CPU依賴。 – zeboidlund

1

我想說這可能是大多數情況下的優化。

也就是說,你不應該花時間優化未測量的代碼。

這可能例如是,如果一個值得優化:

  • 大部分的情況下,涉及弦數或很短的字符串。
  • 它需要很長的時間調用函數之前計算preEval參數。

在實際情況下測量您的代碼,找出您的瓶頸,然後您優化。