目录

  • 一、ArrayList遍历方式
    • 1、普通for循环遍历
    • 2、增强for循环遍历
    • 3、Iterator迭代器遍历
    • 4、三种方式比较
  • 二、Map遍历方式
    • 1、增强for循环 + keySet() 遍历
    • 2、增强for循环 + entrySet() 遍历
    • 3、Iterator + keySet() 遍历
    • 4、Itorator + entrySet() 遍历
    • 5、四种方式比较
  • 三、java开发手册(关于map的)

一、ArrayList遍历方式

1、普通for循环遍历

for(int i=0; i<lists.size(); i++){String key = lists.get(i);
}

2、增强for循环遍历

for(String str : lists){String key = str;
}

3、Iterator迭代器遍历

Iterator iterator = lists.iterator();
while (iterator.hasNext()){String key = iterator.next().toString();
}

4、三种方式比较

import java.util.ArrayList;
import java.util.Iterator;public class ArrayListFor {private static ArrayList<String> initData(){ArrayList<String> lists = new ArrayList<String>(1000000);for(int i=0; i<1000000; i++){lists.add(i + "abcdefg");}return lists;}private static String forOne(ArrayList<String> lists){StringBuilder sb = new StringBuilder();sb.append("普通For循环(int i=0; i<count; i++)。");sb.append("\r\n");long start = System.currentTimeMillis();for(int i=0; i<lists.size(); i++){String key = lists.get(i);}long end = System.currentTimeMillis();sb.append("duration = [" + (end - start) + "]ms");sb.append("\r\n");return sb.toString();}private static String forTwo(ArrayList<String> lists){StringBuilder sb = new StringBuilder();sb.append("加强For循环(int i : lists)。");sb.append("\r\n");long start = System.currentTimeMillis();for(String str : lists){String key = str;}long end = System.currentTimeMillis();sb.append("duration = [" + (end - start) + "]ms");sb.append("\r\n");return sb.toString();}private static String forThree(ArrayList<String> lists){StringBuilder sb = new StringBuilder();sb.append("Iterator循环(list.iterator())。");sb.append("\r\n");long start = System.currentTimeMillis();Iterator iterator = lists.iterator();while (iterator.hasNext()){String key = iterator.next().toString();}long end = System.currentTimeMillis();sb.append("duration = [" + (end - start) + "]ms");sb.append("\r\n");return sb.toString();}public static String forCycle(ArrayList<String> lists) {StringBuilder sb = new StringBuilder();sb.append("ArrayList遍历比较:");sb.append("\r\n");sb.append(forOne(lists));sb.append(forTwo(lists));sb.append(forThree(lists));return sb.toString();}public static void main(String[] args) {ArrayList<String> lists = initData();for(int i=0; i<5; i++){System.out.println(forCycle(lists));}}
}

运行结果:

ArrayList遍历比较:
普通For循环(int i=0; i<count; i++)。
duration = [33]ms
加强For循环(int i : lists)。
duration = [35]ms
Iterator循环(list.iterator())。
duration = [34]msArrayList遍历比较:
普通For循环(int i=0; i<count; i++)。
duration = [29]ms
加强For循环(int i : lists)。
duration = [32]ms
Iterator循环(list.iterator())。
duration = [32]msArrayList遍历比较:
普通For循环(int i=0; i<count; i++)。
duration = [26]ms
加强For循环(int i : lists)。
duration = [27]ms
Iterator循环(list.iterator())。
duration = [27]msArrayList遍历比较:
普通For循环(int i=0; i<count; i++)。
duration = [26]ms
加强For循环(int i : lists)。
duration = [34]ms
Iterator循环(list.iterator())。
duration = [27]msArrayList遍历比较:
普通For循环(int i=0; i<count; i++)。
duration = [26]ms
加强For循环(int i : lists)。
duration = [27]ms
Iterator循环(list.iterator())。
duration = [28]ms

总结: 普通for循环耗时最少,iterator次之,增强for循环耗时最长。

二、Map遍历方式

大致分为 增强for循环Iterator迭代器 两种,而其中每个又各自分为使用 keySet()entrySet() 两种,所以 一共四种

1、增强for循环 + keySet() 遍历

for(String key : maps.keySet()){String str = maps.get(key);
}

2、增强for循环 + entrySet() 遍历

for(Map.Entry<String, String> entry : maps.entrySet()){String str = entry.getValue();
}

3、Iterator + keySet() 遍历

Iterator iterator = maps.keySet().iterator();
while (iterator.hasNext()){String key = iterator.next().toString();String str = maps.get(key);
}

4、Itorator + entrySet() 遍历

Iterator iterator = maps.entrySet().iterator();
while (iterator.hasNext()){Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next();String str = entry.getValue();
}

5、四种方式比较

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;public class HashMapFor {private static HashMap<String,String> initData(){HashMap<String,String> maps = new HashMap<String, String>(10000000 * 2);for(int i=0; i<10000000; i++){String key = i + "abcdefg";maps.put(key, key);}return maps;}private static String forOne(HashMap<String, String> maps){StringBuilder sb = new StringBuilder();sb.append("增强For循环 + keySet()(int i : map.keySet())。");sb.append("\r\n");long start = System.currentTimeMillis();for(String key : maps.keySet()){String str = maps.get(key);}long end = System.currentTimeMillis();sb.append("duration = [" + (end - start) + "]ms");sb.append("\r\n");return sb.toString();}private static String forTwo(HashMap<String, String> maps){StringBuilder sb = new StringBuilder();sb.append("增强For循环 + entrySet()(Entry<> entry : map.entrySet())。");sb.append("\r\n");long start = System.currentTimeMillis();for(Map.Entry<String, String> entry : maps.entrySet()){String str = entry.getValue();}long end = System.currentTimeMillis();sb.append("duration = [" + (end - start) + "]ms");sb.append("\r\n");return sb.toString();}private static String forThree(HashMap<String, String> maps){StringBuilder sb = new StringBuilder();sb.append("Iterator循环 + keySet()(map.keySet().iterator())。");sb.append("\r\n");long start = System.currentTimeMillis();Iterator iterator = maps.keySet().iterator();while (iterator.hasNext()){String key = iterator.next().toString();String str = maps.get(key);}long end = System.currentTimeMillis();sb.append("duration = [" + (end - start) + "]ms");sb.append("\r\n");return sb.toString();}private static String forFour(HashMap<String, String> maps){StringBuilder sb = new StringBuilder();sb.append("Iterator循环 + entrySet()(map.entrySet().iterator())。");sb.append("\r\n");long start = System.currentTimeMillis();Iterator iterator = maps.entrySet().iterator();while (iterator.hasNext()){Map.Entry<String, String> entry = (Map.Entry<String, String>)iterator.next();String str = entry.getValue();}long end = System.currentTimeMillis();sb.append("duration = [" + (end - start) + "]ms");sb.append("\r\n");return sb.toString();}public static String forCycle(HashMap<String, String> maps) {StringBuilder sb = new StringBuilder();sb.append("HashMap遍历比较:");sb.append("\r\n");sb.append(forOne(maps));sb.append(forTwo(maps));sb.append(forThree(maps));sb.append(forFour(maps));return sb.toString();}public static void main(String[] args) {HashMap<String, String> maps = initData();for(int i=0; i<5; i++){System.out.println(forCycle(maps));}}
}

运行结果:

HashMap遍历比较:
增强For循环 + keySet()(int i : map.keySet())。
duration = [66]ms
增强For循环 + entrySet()(Entry<> entry : map.entrySet())。
duration = [46]ms
Iterator循环 + keySet()(map.keySet().iterator())。
duration = [68]ms
Iterator循环 + entrySet()(map.entrySet().iterator())。
duration = [45]msHashMap遍历比较:
增强For循环 + keySet()(int i : map.keySet())。
duration = [63]ms
增强For循环 + entrySet()(Entry<> entry : map.entrySet())。
duration = [44]ms
Iterator循环 + keySet()(map.keySet().iterator())。
duration = [65]ms
Iterator循环 + entrySet()(map.entrySet().iterator())。
duration = [47]msHashMap遍历比较:
增强For循环 + keySet()(int i : map.keySet())。
duration = [48]ms
增强For循环 + entrySet()(Entry<> entry : map.entrySet())。
duration = [37]ms
Iterator循环 + keySet()(map.keySet().iterator())。
duration = [72]ms
Iterator循环 + entrySet()(map.entrySet().iterator())。
duration = [34]msHashMap遍历比较:
增强For循环 + keySet()(int i : map.keySet())。
duration = [54]ms
增强For循环 + entrySet()(Entry<> entry : map.entrySet())。
duration = [41]ms
Iterator循环 + keySet()(map.keySet().iterator())。
duration = [49]ms
Iterator循环 + entrySet()(map.entrySet().iterator())。
duration = [34]msHashMap遍历比较:
增强For循环 + keySet()(int i : map.keySet())。
duration = [47]ms
增强For循环 + entrySet()(Entry<> entry : map.entrySet())。
duration = [31]ms
Iterator循环 + keySet()(map.keySet().iterator())。
duration = [47]ms
Iterator循环 + entrySet()(map.entrySet().iterator())。
duration = [31]ms

总结:

  • entrySet()keySet() 效率要好点
  • Iterator 要比 for each 效率要好点
  • 所以:Iterator + entrySet() 效率最好(参考需谨慎)

三、java开发手册(关于map的)

  • 推荐使用 entrySet 遍历 Map 集合 KV,而不是使用 keySet 方式遍历

  • 原因:keySet 其实是遍历了2次,一次是转为 Iterator 对象,另一次是从 hashMap 中取出 key 所对应的 value。而 entrySet 只是遍历了一次就把 keyvalue 都放到了 entry 中,效率更高。如果是JDK8,使用 Map.foreach 方法。

  • 正例:values() 返回的是V值集合,是一个 list 集合对象,keySet() 返回的是 K值集合,是一个Set集合对象,entrySet() 返回的是 K-V值组合集合。

ArrayList和HashMap遍历比较相关推荐

  1. Arraylist、HashSet去重复 treeSet排列实现方法 HashMap遍历取值

    2019独角兽企业重金招聘Python工程师标准>>> java提供的Arraylist本身不能对添加的元素进行去重,需要在添加后进行比较,如果相同就不添加 public stati ...

  2. Java 集合List、Set、HashMap操作一(Array转List、Set排序、HashMap遍历、Set遍历、List遍历、HashMap大小长度、List打乱顺序)

    数组转集合(Array转List) import java.util.*; import java.io.*;public class ArrayToCollection{public static ...

  3. HashMap遍历方法和实现原理分析

    1.HashMap 1.1.HashMap遍历方法 public class CircleMap { public static void main(String[] args) { //创建Hash ...

  4. HashMap遍历的两种方式,推荐使用entrySet()

    转自:HashMap遍历的两种方式,推荐使用entrySet() 第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterat ...

  5. Java HashMap遍历的两种方式

    今天来搞一次HashMap 遍历的操作方式: 经过测试,方式一的效率要远高于方式二.,1000000条测试数据,第一种大概耗时20多秒,第二种耗时大概40多秒.所以,建议以后使用第一种方式. 直接上代 ...

  6. [Java] HashMap遍历的两种方式

    Java中HashMap遍历的两种方式原文地址: http://www.javaweb.cc/language/java/032291.shtml 第一种: Map map = new HashMap ...

  7. Java中HashMap遍历的两种方式

    第一种: Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Ma ...

  8. Java HashMap 遍历方式性能探讨

    转载自 Java HashMap 遍历方式性能探讨 关于HashMap的实现这里就不展开了,具体可以参考JDK7与JDK8中HashMap的实现 JDK8之前,可以使用keySet或者entrySet ...

  9. Java 7 对ArrayList和HashMap的性能的提升

    2019独角兽企业重金招聘Python工程师标准>>> 在最新的Java7的ArrayList和HashMap, JDK做了一些调整. ArrayList以前的版本是默认创建10个元 ...

最新文章

  1. android笔试题整理
  2. painticon java_新人,关于java的 paintIcon()方法
  3. 一个基于Node.js的本地快速测试服务器
  4. 算法解读--递归(二)
  5. Xcode 真机沙盒
  6. 利用FPGA实现外设通信接口之:利用FPGA实现USB 2.0通信接口
  7. tomcat c3p0 mysql_C3P0数据库连接池与tomcat一起使用时报错
  8. 在Eclipse中编写servlet时出现The import javax.servlet cannot be resolved 问题解决办法
  9. 龙蜥社区成立系统运维SIG,开源sysAK系统运维工具集
  10. python第八题 查找敏感单词
  11. Docker存储卷基本操作
  12. 为什么我的计算机无法评分,高手看看我的电脑鲁大师怎么评分这么低啊
  13. 不得不学,从零到一搭建ELK日志,Docker环境下部署 logstash工具
  14. el-table单元格不自动换行
  15. Merlin:一个开源的神经网络语音合成系统
  16. linux ssh 终端退格键,退格键,Tab,Del和箭头键在终端中不起作用(使用ssh)
  17. 培训机构出来的程序员进不了大厂?
  18. bistoury建库建表(一)
  19. win10系统更新服务器失败怎么回事,Win10总是更新失败怎么办?Windows更新出现更新失败的解决方法...
  20. (Python)爬虫学习(一)

热门文章

  1. python语言为什么叫python_Python为什么叫Python,Java又如何而来?
  2. 【转】CT中的“层“与“排“的区别
  3. 【转】10个推荐的 PACS/DICOM Server开源项目
  4. 【转】如何用好SVN的Branch
  5. 【转】C++/CLI入门系列 第二篇:封装C++ dll库,提供接口给C#调用
  6. Azure Table storage 基本用法 -- Azure Storage 之 Table
  7. Java中Lambda表达式与方法引用和构造器引用
  8. PWN-PRACTICE-BUUCTF-22
  9. 【HDU - 5883】The Best Path(判断欧拉回路)
  10. 【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐搭积木(状压dp)