對於List
一般有兩種實現方式,一種基於數組,如ArrayList;一種基於鏈表,如LinkedList。查看其類定義,有一個非常明顯的區別,就是ArrayList實現了一個特殊的接口RandomAccess
。該接口是一個標記接口,指示集合類是否具備隨機訪問能力,什麼是隨機訪問能力呢,就是get(i)
的時間複雜度。如果實現了RandomAccess
接口,get(i)的時間複雜度一般就很小,遍歷的時候使用
for (int i=0, n=list.size(); i < n; i++) list.get(i);
就能獲取更好的性能;否則使用迭代器遍歷更好。
所以遍歷List
的正確方式是
if(list instanceof RandomAccess) {
//隨機訪問
for (int i = 0; i < list.size(); i++) {
User user = list.get(i);
System.out.println(user);
}
}else{
//順序訪問
for (User user : list) {
System.out.println(user);
}
}