建議60:性能考慮,數組是首選
一、分析
數組在實際的系統開發中使用的越來越少,我們通常隻有在閱讀一些開源項目時才會看到它們的身影,在Java中它确實沒有List、Set、Map這些集合使用起來友善,但是在基本類型處理方面,數組還是占優勢的,而且集合的底層也是通過數組實作。
二、場景
比如對一個資料集求和的計算:
1 //對數組求和
2 public static int sum(int[] datas){
3 int sum = 0;
4 for(int i = 0; I < datas.length; I++){
5 sum += datas[i];
6 }
7 return sum;
8 }
對于一個int類型的數組求和,取出所有元素的數組元素并相加,此算法中如果是基本類型則使用數組效率最高,使用集合效率次之.
1 //對清單求和計算
2 public static int sum(List<Integer> datas){
3 int sum = 0;
4 for(int i = 0; i < datas.size(); i++){
5 sum += datas.get(i);
6 }
7 return sum;
8 }
注意才相加求和的運算中,做了一個拆箱動作(sum += datas.get(i); ),這對于性能瀕于臨界的系統是比較危險的。
在初始化List的時候,要進行裝箱動作,把一個int類型包裝成一個Integer對象,雖然有整形池在,但不在整型池範圍都會産生一個新的Integer對象。
衆所周知,基本類型是在棧記憶體操作的,而對象則是在堆記憶體中操作的。棧記憶體的特點是速度快,容量小;堆記憶體的特點是速度慢,容量大(從性能上講,基本類型的處理占優勢)。
其次,在進行求和計算(或者其他周遊計算) 時要做拆箱動作,是以無謂的性能消耗也就産生了.
三、建議
性能要求較高的場景中,使用數組替代集合。在實際測試中發現:對于基本類型進行求和計算時,數組的效率是集合的10倍。
作者:SummerChill |