A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李万海 中级黑马   /  2013-3-24 09:33  /  1875 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李万海 于 2013-3-28 18:45 编辑

在使用HashMap和map.entry时候,在Set集合中也可以这样用
Set<Entry<String, Integer>> entryset=entry.entrySet();
                  for(Entry<String, Integer> ent:entryset){
                          System.out.println(ent);
也可以这样用
Set<Map.Entry<String, Integer>> entryset=entry.entrySet();
                  for(Map.Entry<String, Integer> ent:entryset){
                          System.out.println(ent);
这两者有什么区别吗?

点评

记得及时处理帖子哦,继续追问,或将分类改成【已解决】,谢谢  发表于 2013-3-24 13:49

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

3 个回复

正序浏览
我来说两句吧!楼上说的我不敢苟同!我觉得他们是一样的,只是写法的表达方式不一样而已!刚好今天我刚看了张老师的视频讲到这么一个问题,他的原话是这样说的,Entry其他集合不可以用,只能用在map集合中,为了表示这种特殊的关系,就命名为Map.Entry。这就是张老师的原话。这个接口里面有五个方法,要想迭代集合,就需要调用里面的两个方法getKey()和getValue();我想你编码的目的是为了迭代打印集合吧,你这样ent.getKey()就拿到键,ent.getValue()就拿到值,这样你就可以迭代集合了!这是map集合迭代的一种方式,还有另一种是keySet()方法。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
lucy198921 发表于 2013-3-24 10:54
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry。
它表示Map中的一个实体(一个key-value对 ...

另外需要了解的是:

HashMap 在底层将 key-value 当成一个整体进行处理,这个整体就是一个 Entry 对象。HashMap 底层采用一个 Entry[] 数组来保存所有的 key-value 对,当需要存储一个 Entry 对象时,会根据 Hash 算法来决定其存储位置;当需要取出一个 Entry 时,也会根据 Hash 算法找到其存储位置,直接取出该 Entry。由此可见:HashMap 之所以能快速存、取它所包含的 Entry,完全类似于现实生活中母亲从小教我们的:不同的东西要放在不同的位置,需要时才能快速找到它。

当创建 HashMap 时,有一个默认的负载因子(load factor),其默认值为 0.75,这是时间和空间成本上一种折衷:增大负载因子可以减少 Hash 表(就是那个 Entry 数组)所占用的内存空间,但会增加查询数据的时间开销,而查询是最频繁的的操作(HashMap 的 get() 与 put() 方法都要用到查询);减小负载因子会提高数据查询的性能,但会增加 Hash 表所占用的内存空间。
回复 使用道具 举报
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。
它表示Map中的一个实体(一个key-value对)。
接口中有getKey(),getValue方法。

Entry:

这是一个HashMap类的内部静态类,实现了Map.Entry接口。
接受两个模板参数K和V.key和hash一旦在构造函数中被初始化,就不可改变,
并且由于有next的存在,Entry可以构成一个单向链表。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马