https://blog.csdn.net/tjcyjd/article/details/11111401
Java 中Map 根据底层数据结构的不同,存在多种不同的实现,常见如散列 HashMap ,链表linkedMap ,散列链表linkedHashMap ,树形表(二叉树) TreeMap 等。
本文讨论的是我们编程中最为常用的HashMap 散列表的 几种不同的遍历方式,及各方式间在写法和效率上的比较。
首先准备一个Map 散列表,存储十万条记录。
key 是从key0 开始一直到 key99999
value 从hello0 开始一直到 hello99999
- public static void main(String[] args) {
- Map<String,Object> map=new HashMap<String,Object>();
- for(int i=0;i<100000;i++){
- map.put("key"+i, "hello"+i);
- }
- }
遍历方式一 : entrySet() + 增强for循环
- // Map 遍历方式一 //2425.7
- static void iterator_type1(Map<String,Object> map){
- Set<Map.Entry<String, Object>> set= map.entrySet();
- long start=new Date().getTime();
- for(Map.Entry<String, Object> item :set){
- String key=item.getKey();
- Object value=item.getValue();
- System.out.println("key:"+key+" "+"value:"+value);
- }
- long end=new Date().getTime();
- System.out.println("遍历耗时为:"+(end-start)+" 毫秒");
- }
遍历方式二:entrySet() +iterator迭代
- //Map 遍历方式二 2408.9
- static void iterator_type2(Map<String,Object> map){
- Set<Map.Entry<String, Object>> set= map.entrySet();
- Iterator<Map.Entry<String, Object>> it= set.iterator();
- long start=new Date().getTime();
- while(it.hasNext()){
- Map.Entry<String, Object> item= it.next();
- String key=item.getKey();
- Object value=item.getValue();
- System.out.println("key:"+key+" "+"value:"+value);
- }
- long end=new Date().getTime();
- System.out.println("遍历耗时为:"+(end-start)+" 毫秒");
- }
遍历方式三:keySet() + iterator迭代
- //Map 遍历方式三 2441.0
- static void iterator_type3(Map<String,Object> map){
- Set<String> keys= map.keySet();
- Iterator<String> it= keys.iterator();
- long start=new Date().getTime();
- while(it.hasNext()){
- String key=it.next();
- Object value=map.get(key);
- System.out.println("key:"+key+" "+"value:"+value);
- }
- long end=new Date().getTime();
- System.out.println("遍历耗时为:"+(end-start)+" 毫秒");
- }
遍历方式四:keySet() + 增强for循环
- //Map 遍历方式四 2445.5
- static void iterator_type4(Map<String,Object> map){
- Set<String> keys= map.keySet();
- long start=new Date().getTime();
- for(String key :keys){
- Object value=map.get(key);
- System.out.println("key:"+key+" "+"value:"+value);
- }
- long end=new Date().getTime();
- System.out.println("遍历耗时为:"+(end-start)+" 毫秒");
- }