這幾天學了下java8的新特性,java8最顯著的改變之一就是加入lambda表達式,這個以后再說。
定義少量的數據 對少量的數據進行遍歷
Map<String,Integer> map = new HashMap<>(16);
map.put("a",10);
map.put("b",20);
map.put("c",30);
map.put("d",40);
map.put("e",50);
//通常方法1 foreach entrySet遍歷 entry是map里面定義的一個接口
for (Map.Entry<String,Integer> entry:map.entrySet()){
}
//通常方法2 Iterator接口遍歷
Iterator<Map.Entry<String, Integer>> iterator = map.entrySet().iterator();
while (iterator.hasNext()){
Map.Entry<String,Integer> entry = iterator.next();
}
//通常方法3 遍歷keySet 通過key 取值
for (String key : map.keySet()){
Integer value = map.get(key);
}
//java8 foreach+lambda表達式遍歷
map.forEach((k,v)-> {
});
通過兩個nanoTime相減 再除以1000 獲得各個方式的遍歷時間
forEach遍歷時間:50
iterator遍歷時間:5
遍歷key再取值 遍歷時間:230
java8 forEach遍歷時間:84222
其中 iterator時間是最短的,forEach 實際上就是iterator的語意簡化版 比iterator長一點,而遍歷key再取值,相較於直接獲得entry多了從hashmap 取出key所對應的value值,
而java8 forEach比其他兩個方式耗時長了很多,所以如果系統的性能需求比較高的話,對集合循環的遍歷,慎用forEach。