Map对象中的KeySet()与EntrySet()的区别
Map对象中的KeySet()与EntrySet()的区别
Map集合提供了get()方法获取元素,但是get()对应的是一个键取出值,这种方式比较局限和单一,不能一次性全部取出来。要取出所有的值,就必须要取出所有的键,然后才能获取全部与键所对应的值。这时候get()方法就不能满足我们的需求了,但是Java为我们提供了相应的解决方式。
Map集合为我们提供了两种取值方式:
- 返回值类型:Set< Object > 方法是 keySet();返回此映射中包含键的Set视图,将Map中所有的键存入到Set集合中,因为Set具备迭代器,所以用迭代的方式取出所有键,再根据get()方法取出所对应的值。
- 返回值类型:Set
> 方法是 entrySet(),这个方法取出的是关系,关系中包含key和value,其中 Map.Entry 来表示数据类型。即:将Map集合中的映射关系存入Set集合中这个关系的数据类型 Map.Entry
Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry。它表示Map中的一个实体(一个key-value对)。接口中getKey(),getValue方法。
效率比较:对于keySet()其实是遍历了2次,一次是转为iterator,一次就从Hashmap中取出Key所对应的Value。而entrySet()只是遍历了第一次,他把Key和Value都放到了Entry中,所以就快了。
keySet()取值演示图解:

keySet()取值方式:
public static void main(String[] args) {//创建一个Map集合Map<String,String> m=new HashMap<String,String>();//向Map中添加数据m.put("大象","Elephant");m.put("猴子","Monkey");m.put("熊猫","Panda");//m.keySet()获取所有键的Set集合// m.keySet().iterator()获取迭代器Iterator<String> i =m.keySet().iterator();while(i.hasNext()){//获取keyString key = i.next();//根据key获取valueString value=m.get(key);System.out.println("key:"+key+"--->value:"+value);}}
输出结果为:

entrySet()取值演示图解:

entrySet()取值方式:
public class Test2 {public static void main(String[] args) {//创建一个Map集合Map<String,String> m=new HashMap<>();//向Map中添加数据m.put("大象","Elephant");m.put("猴子","Monkey");m.put("熊猫","Panda");/*将Map中的键和值取出来,再调用Map的EntrySet()方法,最后调用迭代器*/Iterator<Map.Entry<String,String>> i=m.entrySet().iterator();while(i.hasNext()){Map.Entry<String, String> next = i.next();/*因为Map.Entry接口为我们提供了getKey()和getValue()方法,我们可以用这两个方法获取相应的键和值*/ String key = next.getKey();String value = next.getValue();System.out.println("key:"+key+"--->value:"+value);}}
}
输出结果为:
总结:
在API文档中有 public static interface Map.Entry
keySet():
先获取所有键的集合, 再根据键获取对应的值。(即先找到丈夫,去找妻子)
entrySet():
先获取map中的键值关系封装成一个个的entry对象, 存储到一个Set集合中,再迭代这个Set集合, 根据Entry获取对应的Key和Value向集合中存储自定义对象 。(Entry类似于是结婚证)
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
