iterator和for語句解析list的效能對比
阿新 • • 發佈:2019-01-28
偶然看到一些程式碼用Iterator來獲取list的引數, 如下
Iterator<String> it = list.iterator();
String staffCode;
while(it.hasNext()){
staffCode = it.next();
}
那麼它和常見的get方法獲取對比效能如何呢?
for(int i=list.size()-1;i>=0;i--){
staffCode = list.get(i);
}
於是做個試驗
public void testMain(){ //初始化 int sum = 10000; List<String> arrList = new ArrayList<String>(); List<String> linkList = new LinkedList<String>(); String con = "test"; for(int i=0;i<sum;i++){ arrList.add(con); linkList.add(con); } System.out.println("---------------------測試結果------------------------"); System.out.println("for arrList 時間是 " + testFor(arrList)); System.out.println("for linkList 時間是 " + testFor(linkList)); System.out.println("iterator arrList 時間是 " + testIterator(arrList)); System.out.println("iterator linkList 時間是 " + testIterator(linkList)); } public long testFor(List<String> list) { long startTime = 0L,endTime = 0L; String str; startTime = System.nanoTime(); for(int i=list.size() - 1; i>=0; i--){ str = list.get(i); } endTime = System.nanoTime(); return endTime - startTime; } public long testIterator(List<String> list){ long startTime = 0L, endTime = 0L; String str; startTime = System.nanoTime(); Iterator<String> it = list.iterator(); while(it.hasNext()){ str = it.next(); } endTime = System.nanoTime(); return endTime - startTime; }
3次列印結果
結果比較明顯, for的get方式比直接list.iterator效率高一些.但是list,iterator也不是不好, 它是犧牲一點效能換取更好的一些靈活性. 像有些大神說的, 假如日後list的介面改為set了, iterator的做法幾乎不必變,而list的get方法就無法再使用了.可見, iterator的迭代在設計思想上更接近java的面向物件特點.