`
boz.lee
  • 浏览: 18605 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

keySet和entrySet的区别 [转]

I 
阅读更多
转自: http://blog.csdn.net/lwzcjd/article/details/5432430 (下文)
实例在 http://blog.csdn.net/liu826710/article/details/9001254 (需要IE去打开)

1、基本概述

Set<Map.Entry<K,V>> entrySet()  返回此映射中包含的映射关系的 set 视图。

Set<K>              keySet()      返回此映射中包含的键的 set 视图。

2、效率分析

对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashmap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。

3、使用举例

Map<String, String> maps = new HashMap<String, String>();   
  //方法一: 用entrySet()   
  Iterator<Entry<String,String>> it = maps.entrySet().iterator();   
  while(it.hasNext()){   
   Map.Entry<String,String> m = it.next();   
   String key = m.getKey();
   String value= m.getValue(); 
  }   
  // 方法二:jdk1.5支持,用entrySet()和For-Each循环()   
  for (Map.Entry<String, String> m : maps.entrySet()) {   
   String key = m.getKey();
   String value= m.getValue();    
  }   
  // 方法三:用keySet()   
  Iterator<String> it2 = maps.keySet().iterator();   
  while (it2.hasNext()){   
   String key = it2.next();
   String value= maps.get(key);
  }   
  // 方法四:jdk1.5支持,用keySet()和For-Each循环   
  for(String m: maps.keySet()){   
   String key = m;
   String value= maps.get(m);
  }

foreach和while的效率几乎是差不多的,而for则相对较慢一些。foreach可以替代掉for吗?显然不是。
foreach的内部原理其实还是 Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove(),更不能使用下标来方便的访问元素。因此foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于增加删除和使用下标等复杂的操作。
分享到:
评论

相关推荐

    集合嵌套集合并用迭代器输出,有关keySet()和entrySet()的练习

    此文件是用eclipse打包的,如果用eclipse工具可直接导入查看,如果用的是idea工具,可以打开bin下的.class文件之后,拖入到idea运行即可

    java map集合

    NULL 博文链接:https://hoochiang.iteye.com/blog/1816970

    HashMap 概述 精讲 .md

    - HashMap 和 HashTable 的区别 - 相同点 - 不同点 - HashMap 和 HashSet 的区别 - HashMap 底层结构 - AbstractMap 类 - Map 接口 - 重要内部类和接口 - Node 接口 - KeySet 内部类 - Values 内部类 - ...

    java遍历特例

    // 方法二:jdk1.5支持,用entrySet()和For-Each循环() Java代码 for (Map.Entry, String&gt; m : emails.entrySet()) { logger.info("email-" + m.getKey() + ":" + m.getValue()); } for (Map....

    Java Map遍历方式的选择

    理由是:entrySet方法一次拿到所有key和value的集合;而keySet拿到的只是key的集合,针对每个key,都要去Map中额外查找一次value,从而降低了总体效率。那么实际情况如何呢?  为了解遍历性能的真实差距,包括在...

    java中Map集合的常用遍历方法及HashMap的应用实例

    1、遍历Map.entrySet():它的每一个元素都是Map.Entry对象,这个对象中, 放着的就是Map中的某一对key-value; 2、遍历Map.keySet():它是Map中key值的集合,我们可以通过遍历这个集合来 读取Map中的元素; 3、...

    金陵科技学院软件院大二上Java高级1212Map.docx

    1212Map.doc 目的: 学会使用 Map、TreeMap 完成内容 1. 定义 Map, 加入一些数据 使用 entrySet 方式显示全部键、值其内容 使用 keySet 方式显示全部键、值内容 使用 values 显示全部值内容

    ist的matlab代码-uebung05:练习05

    是的matlab代码在事件中锻炼。 数据结构 在本练习中,我们使用Java API提供的List , Set和Map数据结构。 此外,已经实现了ueb05.CorpusReader类,它提供了一个静态方法...keySet和values提供Collections 。 可以使用C

    怎样遍历一个HashMap?

    &lt;br&gt;for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { &lt;br&gt; Map.Entry entry = (Map.Entry) iter.next(); &lt;br&gt; Object key = entry.getKey(); &lt;br&gt; Object val = entry.getValue()...

    pageDate封装参数,不用实体类

    Iterator entries = properties.entrySet().iterator(); Entry entry; String name = ""; String value = ""; while (entries.hasNext()) { entry = (Entry) entries.next(); name = (String) entry.get...

    sesvc.exe 阿萨德

    和 1.7 大体上都差不多,还是有几个重要的区别: TREEIFY_THRESHOLD 用于判断是否需要将链表转换为红黑树的阈值。 HashEntry 修改为 Node。 Node 的核心组成其实也是和 1.7 中的 HashEntry 一样,存放的都是 key ...

    Java容器.xmind

    Set,V&gt;&gt; entrySet​() 线程不安全,速度快,允许存放null键,null值。 SortedMap 标记: class TreeMap 对键进行排序 HashTable 标记: class Properties 标记: class 线程安全,速度慢,不允许存放null键,...

    阿里巴巴编码规范 基础技能认证 考题分析(考题+答案).docx

    无须区别,统一在业务代码中进行判断和识别。 多选 2.关于并发处理,下列哪些说法符合《阿里巴巴Java开发手册》:ABC A .线程资源必须通过线程池提供,不允许在应用中自行显式创建线程。 B .同步处理时,能锁...

    达内 coreJava 习题答案

    6、输出所有的水仙花数,把谓水仙花数是指一个数3位数,其各各位数字立方和等于其本身, 例如: 153 = 1*1*1 + 3*3*3 + 5*5*5 class DafodilNumber{ public static void main(String[] args){ System.out....

Global site tag (gtag.js) - Google Analytics