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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 梁清平 中级黑马   /  2012-5-14 17:15  /  2502 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

能不能简单的讲一下Map.Entry()倒底是是怎么回事啊?这种接口类型太难理解了

6 个回复

倒序浏览
是为了输出的方便
一般情况下,要输出Map中的key 和 value  是先得到key的集合,然后再迭代(循环)由每个key得到每个value
而Entry可以一次性获得这两个值,找个我做过的例子
--------------------------------------------------------------------------
                 Set set = map.keySet();                   //keySet()            
               
                for(Iterator iter = set.iterator();iter.hasNext();)
                {
                        String key = (String)iter.next();              //先获得键key
                        Integer value = (Integer)map.get(key);        //再由键获得value
                       
                        System.out.println(key + "=" + value);
                }         
               
--------------------------------------------------------------------------
                 Set set = map.entrySet();                   //entrySet()
               
                for(Iterator iter = set.iterator();iter.hasNext();)
                {
                        Map.Entry entry = (Map.Entry)iter.next();              
                        String key = (String)entry.getKey();                   //一次性获得键和值 key和value
                        String value = (String)entry.getValue();
                       
                        System.out.println(key + ": " + value);
                }

楼主可以看出 第二种方式直接把集合的关系整个取出  不再用键值取对应的值  是不是方便的多

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 加上泛型就更好了··避免强转和误传.

查看全部评分

回复 使用道具 举报
Map集合中有一个内部类,这个内部类是Map.Entry这个接口的子类,即实现了该接口。
简单说就是:设想有一个房间,这个房间就是Map集合。房间里面有好多对夫妻(Map集合存储的是键值对)。那么,每对夫妻的结婚证就是这个Map.Entry的实例对象。只能解释到这个程度了,想了解更细节的东西,去看源码吧{:soso_e113:}回答完毕!
回复 使用道具 举报
Map.entry是Map内部定义的一个借口,专门用来保存key——value的内容。定义方法:
public static interface Map.entry<K,V> 该接口可以由外部通过“外部类.内部类”的形式直接调用。
它与Map的关系如图:

评分

参与人数 1技术分 +1 收起 理由
攻城狮 + 1 赞一个!

查看全部评分

回复 使用道具 举报
告诉你,jdk为什么提供这个内部接口,如果有人要你去遍历一个HashMap,你怎么做呢?
先得到ketSet,再一个一个迭代吗?也ok。
不过没有拿到entrySet直观明了。
set,list都可以直接迭代,而map迭代必须借助entrySet或者keySet。
回复 使用道具 举报
/**
* Map.Entry<>由来,entry也是一个接口,它是Map集合中的一个内部接口
*
* @author jinxiao
*
*/
interface Map {
public static interface Entry {
public abstract Object getKey();
public abstract Object getValue();
}
}
class HashMap implements Map {
class Test implements Entry {
public Object getKey() {
return null;
}
public Object getValue() {
return null;
}
}
}
回复 使用道具 举报
接口 Map.Entry<K,V>是一个 映射项(键-值对)。即它是以 key-value一起作为映射关系。Map.Entry 中的Entry也是一个接口,它是Map中的一个内部接口。
在对map集合进行取出的时候,将Map集合中的映射关系存入到set集合中,而这个关系的数据类型就是Map.Entry.

具体从map集合的两种取出方式说起:
1、keySet访问Map方式是将所有的键存入到Set集合中,再利用Set集合具有迭代器原理,通过get方法,实现map.get(key)取出每一个键对应的值value。
这样做存在一个问题,
从Map中取得key。然后我们必须重复返回Map取得对应的value。

2、entrySet访问Map方式是返回此映射中包含的映射关系。这个关系就是Map.Entry实例对象集。Map.Entry又提供了一个getKey()方法和一个getValue()方法。可以不用返回Map,通过getKey()方法和getValue() 就可以获得相应的键和值。省去反复从Map中get(value)的操作。

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