黑马程序员技术交流社区
标题:
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, 下载次数: 15)
下载附件
2013-11-19 15:21 上传
作者:
狼王
时间:
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