听说map迭代使用下面这种迭代方式会相对高效一些,先留着,有时间再去验证:
Map map = new HashMap();
Iterator iter = map.entrySet().iterator();
Map.Entry entry = null;
while (iter.hasNext()) {
entry = (Map.Entry) iter.next();
Object key = entry.getKey();
Object val = entry.getValue();
}
public class MapDemo {
public static void main(String[] args) {
Integer count = 1000;
Map<String, String> map = new HashMap<>(count);
for (int i = 0; i < count; i++) {
map.put("key-" + i, "val-" + i);
}
long startTime = System.nanoTime();
for (String key : map.keySet()) {
Object value = map.get(key);
}
long endTime = System.nanoTime();
System.out.println(String.format("keySet方式共计耗时:\t%d", (endTime - startTime)));
startTime = System.nanoTime();
for (Map.Entry<String, String> entry : map.entrySet()) {
String key = entry.getKey();
Object value = entry.getValue();
// 针对每个key-value对进行操作
}
endTime = System.nanoTime();
System.out.println(String.format("entrySet方式共计耗时:\t%d", (endTime - startTime)));
startTime = System.nanoTime();
map.forEach((key, value) -> {
});
endTime = System.nanoTime();
System.out.println(String.format("forEach方式共计耗时:\t%d", (endTime - startTime)));
}
}
当count = 1000时
keySet方式共计耗时: 808786
entrySet方式共计耗时:412030
forEach方式共计耗时: 48206933
当count = 1000000时
keySet方式共计耗时: 33395155
entrySet方式共计耗时:26739088
forEach方式共计耗时: 64834337
当count = 5000000时
keySet方式共计耗时: 162947314
entrySet方式共计耗时:124422669
forEach方式共计耗时: 148806415
当count = 10000000时
keySet方式共计耗时: 375761194
entrySet方式共计耗时:279943596
forEach方式共计耗时: 243577789
当count = 12000000时
keySet方式共计耗时: 456298704
entrySet方式共计耗时:273588573
forEach方式共计耗时: 284962205
当 count = 15000000时
keySet方式共计耗时: 589473838
entrySet方式共计耗时:405628694
forEach方式共计耗时: 404583568