今天針對我們日常代碼中的一些小細節, 談談我們可以優化的地方, 希望對大家有用。
迴圈優化
明確一個概念, 對方法的調用,
for (int i = 0; i < list.size(); i++)
{
...
}
建議替換為:
for (int i = 0, int length = list.size(); i < length; i++)
{
...
}
除此之外, 如果在迴圈結構中, 存在迴圈元素無關的邏輯判斷條件的計算, 比如 if(A > B && B > C)建議改為if(conditionD)。
2. 將迴圈變數無關的計算都放到迴圈外, 這一條不解釋。
3. 不要在迴圈中使用try…catch…, 應該把其放在最外層。 主要原因在於, 如果迴圈中出現exception, try..catch在外層就直接跳出了迴圈, 否則執行中拋出異常就會繼續迴圈。
4.迴圈內不要不斷創建物件引用
例如:
for (int i = 1; i <= count; i++)
{
Object obj = new Object();
}
這種做法會導致記憶體中有count份Object物件引用存在, count很大的話, 就耗費記憶體了, 建議為改為:
Object obj = null;
for (int i = 0; i <= count; i++)
{
obj = new Object();
}
邏輯判斷優化
1. 儘量採用“懶載入”的策略, 即在需要的時候才創建
例如:
String str = "forest";
if (i == 1)
{
list.add(str);
}
建議替換為:
if (i == 1)
{
String str = "forest";
list.add(str);
}
2. switch 語句按照出現頻率排序, 讓最常用的放在最前面, 減少無效判斷。
3. if 語句將弱計算的條件放在前面, 避免過多的計算。
4. 字串變數和字串常量equals的時候將字串常量寫在前面,這是一個比較常見的小技巧了。 例如:
String str = "forest";
if (str.equals("forest"))
{
...
}
建議修改為:
String str = "forest";
if ("forest".equals(str))
{
...
}
運算式優化
降低計算強度,乘法和除法使用移位操作, 使用移位元代替整數2的倍數的乘除,
使用位運算代替取餘運算。
例如:
for (val = 0; val < 100000; val += 5)
{
a = val * 8;
b = val / 2;
}
用移位操作可以極大地提高性能, 因為在電腦底層, 對位元的操作是最方便、最快的, 因此建議修改為:
for (val = 0; val < 100000; val += 5)
{
a = val << 3;
b = val >> 1;
}
2. 布林邏輯優化, 這一條也是平時大家不太注意的細節, 例如, !a && !b 轉換為!(a || b) , 會減少程式很大的計算量。
一點小結
代碼中可以優化的點, 其實還有很多了, 舉這幾個例子的目的,