黑马程序员技术交流社区

标题: 关于Map.Entry() [打印本页]

作者: 梁清平    时间: 2012-5-14 17:15
标题: 关于Map.Entry()
能不能简单的讲一下Map.Entry()倒底是是怎么回事啊?这种接口类型太难理解了
作者: 程旦    时间: 2012-5-14 17:23
是为了输出的方便
一般情况下,要输出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);
                }

楼主可以看出 第二种方式直接把集合的关系整个取出  不再用键值取对应的值  是不是方便的多
作者: 赵玮_Tom    时间: 2012-5-14 17:25
Map集合中有一个内部类,这个内部类是Map.Entry这个接口的子类,即实现了该接口。
简单说就是:设想有一个房间,这个房间就是Map集合。房间里面有好多对夫妻(Map集合存储的是键值对)。那么,每对夫妻的结婚证就是这个Map.Entry的实例对象。只能解释到这个程度了,想了解更细节的东西,去看源码吧{:soso_e113:}回答完毕!
作者: 于潇    时间: 2012-5-14 17:28
Map.entry是Map内部定义的一个借口,专门用来保存key——value的内容。定义方法:
public static interface Map.entry<K,V> 该接口可以由外部通过“外部类.内部类”的形式直接调用。
它与Map的关系如图:


作者: 王勃    时间: 2012-5-14 17:49
告诉你,jdk为什么提供这个内部接口,如果有人要你去遍历一个HashMap,你怎么做呢?
先得到ketSet,再一个一个迭代吗?也ok。
不过没有拿到entrySet直观明了。
set,list都可以直接迭代,而map迭代必须借助entrySet或者keySet。
作者: 金肖    时间: 2012-5-14 18:01
/**
* 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;
}
}
}

作者: 曾_强    时间: 2012-5-14 20:10
接口 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)的操作。






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2