HashMap遍历
方式一
这种方式效率最高,先获取entrySet,然后遍历entrySet,可以同时拿到key和value
使用for循环不能删除元素,会报出ConcurrentModificationException,并发修改异常.如果要删除,可以改成生成器,使用iterator.remove()删除元素
Set<Map.Entry<Integer, String>> entries = hashmap.entrySet();
entries.forEach((entry) -> {
Integer key = entry.getKey();
String value = entry.getValue();
});
// 可以改成生成器
Set<Map.Entry<Integer, String>> entries = hashmap.entrySet();
Iterator<Map.Entry<Integer, String>> iterator = entries.iterator();
while (iterator.hasNext()){
Map.Entry<Integer, String> next = iterator.next();
Integer key = next.getKey();
if (key>10){
// 注意是使用生成器的remove方法,不是hashmap的remove方法
iterator.remove();
}
}
方式二
先获取keySet,然后遍历keySet拿到key,再用key去map中找value
Set<Integer> keySet = hashmap.keySet();
keySet.forEach((key) -> {
String s = hashmap.get(key);
});
效率测试
HashMap<Integer, String> hashmap = new HashMap<>();
for (int i = 0; i < 10000000; i++) {
hashmap.put(i, i + "-" + i);
}
long s0 = System.currentTimeMillis();
Set<Map.Entry<Integer, String>> entries = hashmap.entrySet();
entries.forEach((entry) -> {
Integer key = entry.getKey();
String value = entry.getValue();
});
long s1 = System.currentTimeMillis();
Set<Integer> keySet = hashmap.keySet();
keySet.forEach((key) -> {
String s = hashmap.get(key);
});
long s2 = System.currentTimeMillis();
System.out.println("遍历entrySet耗时:" + (s1 - s0));
System.out.println("遍历keySet耗时:" + (s2 - s1));
// 遍历entrySet耗时:108
// 遍历keySet耗时:163
你要是觉得写的还不错,就点个关注,可以评论区留下足迹,以后方便查看.
你要是觉得写的很辣鸡,评论区欢迎来对线!
欢迎转载!