1、對List的遍歷有三種方式
List<String> list = new ArrayList<String>();
list.add("testone");
list.add(「testtwo」);
...
第一種:
for(Iterator<String> it = list.iterator(); it.hasNext(); ) {
....
}
這種方式在循環執行過程當中會進行數據鎖定, 性能稍差, 同時,若是你想在尋歡過程當中去掉某個元素,只能調用it.remove方法, 不能使用list.remove方法, 不然必定出現併發訪問的錯誤.
java
第二種:
for(String data : list) {
.....
}
內部調用第一種, 換湯不換藥, 所以比Iterator 慢,這種循環方式還有其餘限制, 不建議使用它。
第三種:
for(int i=0; i<list.size(); i++) {
A a = list.get(i);
...
}
內部不鎖定, 效率最高, 可是當寫多線程時要考慮併發操做的問題。
2、測試實例多線程
package com.inspur.Test;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
*@author WHD
*2015-3-5
*/
@SuppressWarnings("unused")
public class MapTest {
private static List<String> list= new ArrayList<String>();
public static void main(String[]args){
MapTest mapTest = new MapTest();
mapTest.initList(list);
mapTest.foreach(list);
mapTest.forlist(list);
mapTest.iteratorList(list);
}
//list 集合中添加10萬條數據
public List initList(List<String> list){
int i=0;
int num=6000000;
for(i=0;i<num;i++){
list.add("list"+i);
}
return list;
}
//list 集合遍歷 foreach
public void foreach(List<String> list){
long start= System.currentTimeMillis();
for(String data:list){
String value=data;
}
long end=System.currentTimeMillis();
long count=end-start;
System.out.println("foreach 循環時間"+count);
}
// list集合遍歷 for
public void forlist(List<String> list){
long start=System.currentTimeMillis();
int i=0;
for( i=0;i<list.size();i++){
String value=list.get(i);
}
long end=System.currentTimeMillis();
long count=end-start;
System.out.println("for list.size() 遍歷時間"+count);
}
// Iterator 遍歷循環
public void iteratorList(List<String> list){
long start= System.currentTimeMillis();
for(Iterator<String> it=list.iterator();it.hasNext();){
String value=it.next();
}
long end=System.currentTimeMillis();
long count=end-start;
System.out.println("iterator 遍歷時間"+count);
}
}
3、測試結果:
(1)、第一次
foreach 遍歷時間:55
for list.size()遍歷時間:47
iterator 遍歷時間:51
(2)、第二次
foreach 遍歷時間:54
for list.size()遍歷時間:44
iterator 遍歷時間:50
(3)、第三次
foreach 遍歷時間:48
for list.size()遍歷時間:43
iterator 遍歷時間:44
從測試的結果咱們能夠明顯的看到效率了!
併發