黑马程序员技术交流社区

标题: keySet和entrySet两者有什么区别,都可遍历map啊? [打印本页]

作者: jttsai    时间: 2013-11-19 15:22
标题: keySet和entrySet两者有什么区别,都可遍历map啊?
本帖最后由 jttsai 于 2013-11-19 15:25 编辑

两者都是遍历map的,都可得到key和value啊,到底有什么区别,求教!越详细越好!!
keySet是键的集合,Set里面的类型即key的类型
entrySet是 键-值 对的集合,Set里面的类型是Map.Entry
这些我是知道的,我想问的是其他方面!

6PU2RE($QZWVQ34C@[P~(S6.jpg (41.21 KB, 下载次数: 12)

6PU2RE($QZWVQ34C@[P~(S6.jpg

作者: 狼王    时间: 2013-11-19 15:24
⑴、Set<k> keySet
                  private static void method_2(Map<Integer, String> map) {
                                Set<Integer> keySet = map.keySet();
                                Iterator<Integer> it = keySet.iterator();
                                while (it.hasNext()) {
                                        Integer key = it.next();
                                String value = map.get(key);
                                Sop(key + "=" + value);
                            }
              }
   ⑵、Set<Map.Entry<k,v>> entrySet:提倡用这种方法
将map集合中的映射关系存入到了set集合中,而这个关系的数据类型就是:Map.Entry。Entry其实就是Map中的一个static内部接口。为什么要定义在内部呢?因为只有有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。
private static void method_3(Map<Integer, String> map) {
                        Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
                        // public static interface Map.Entry<K,V>:Entry<K,V>是Map内部接口
                        Iterator<Entry<Integer, String>> it = entrySet.iterator();
                        while (it.hasNext()) {
                                Map.Entry<Integer, String> me = it.next();
                                Integer key = me.getKey();
                                String value = me.getValue();
                                Sop(key + "=" + value);
                        }
}

作者: com_heima    时间: 2013-11-19 22:17
除了用键找值,和键值一起拿以外,没有任何区别,任选其一。
作者: ReFly    时间: 2013-11-20 00:08
简单点的说:keySet()遍历是先将keys存入Set集合,再遍历该集合中的keys,再用 遍历得到的key取得相应的值 。value= get(key);获得值。

而entrySet()则是把所有的键值对存入Set集合。一对一对的存的。得到所有的键值对,直接遍历该集合得到单个的键值对Map.Entry的对象。再用键值对这种类的方法getKey()和getValue()得到相应的健与值。


其实两个函数名就高数你了。一个是keySet().表示获得所有key 的一个集合。一个是entrySet 表示获得所有“Entry”的集合。 其中“Entry”即是Map.Entry<T,T>   类。是map实体类的一个内部类。表示一对。

更多查看API:java.util.Map.Entry<K,V>

我们老师打了一个比方。很多对夫妻。一种方式是先取得(遍历得到)所有丈夫,然后便知道了所有妻子。keySet();

一种方式就是直接取得(遍历得到)所有的结婚证。直接读结婚证夫是谁,妻是谁。




作者: 吴琼cola    时间: 2013-11-20 16:56
Set<K> keySet()
返回此映射中包含的键的 Set 视图。 写的很清楚就是key的Set
Set<Map.Entry<K,V>> entrySet()
返回此映射中包含的映射关系的 Set 视图。
也是一个Set,而Set中每个元素是内部类Map.Entry。




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