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
posted @ 2021-03-23 09:55  rm-rf*  阅读(54)  评论(0编辑  收藏  举报