本篇内容主要讲解“Java高级之HashMap中的entrySet()方法怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java高级之HashMap中的entrySet()方法怎么使用”吧!
entrySet()方法得到HashMap中各个键值对映射关系的集合。
然后Map.Entry中包含了getKey()和getValue()方法获取键和值。
示例:
public class Demo {
public static void main(String[] args) {
Map<String, String> map = new HashMap<>();
map.put("abc", "123");
map.put("efg", "456");
// 使用增强型for遍历循环Map集合
Set<Map.Entry<String, String>> entrySet = map.entrySet();
for (Map.Entry<String, String> entry : entrySet) {
System.out.println(entry.getKey() + "->" + entry.getValue());
}
}
}
/**
* 打印结果:
* abc->123
* efg->456
*/
HashMap的entrySet()方法返回Set<Map.Entry<String, String>>,那么为什么entrySet()方法可以得到键值对映射集合呢?
public Set<Map.Entry<K, V>> entrySet() {
Set<Map.Entry<K, V>> es;
return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
}
其实entrySet()方法的原理和keySet()方法、values()方法的原理是一致的。
entrySet()方法的源码注释如下:
/**
* 该方法返回值就是这个map中各个键值对映射关系的集合
* 1.Map中采用Entry内部类来表示一个映射项,映射项包含Key和Value
* 2.Map.Entry里面包含getKey()和getValue()方法
*
* @return 返回map中各个键值对映射关系的集合
*/
public Set<Map.Entry<K, V>> entrySet() {
Set<Map.Entry<K, V>> es;
return (es = entrySet) == null ? (entrySet = new EntrySet()) : es;
/*
等价于(代码复杂化)
Set<Map.Entry<K, V>> es = entrySet;
if (es == null) {
entrySet = new EntrySet();
return entrySet;
} else {
return es;
}
*/
}
那么看看编译后生成的字节码文件Demo.class
public class Demo {
public Demo() {
}
public static void main(String[] args) {
Map<String, String> map = new HashMap();
map.put("abc", "123");
map.put("efg", "456");
Set<Entry<String, String>> entrySet = map.entrySet();
Iterator var3 = entrySet.iterator();
while(var3.hasNext()) {
Entry<String, String> entry = (Entry)var3.next();
System.out.println((String)entry.getKey() + "->" + (String)entry.getValue());
}
}
}
能够获取到元素是通过迭代器Iterator遍历得来的,所以entrySet()方法能有键值对的映射集合,是因为iterator()方法。
那么iterator()方法是哪里的呢?
在entrySet()方法中使用new实例化了一个EntrySet类
查看EntrySet类源码,里面有个iterator()方法,字节码文件中调用的就是该iterator()方法
在该方法的return语句中又实例化了EntryIterator类作为返回值,是一个迭代器,查看EntryIterator类的源码,只有一个next()方法
该方法被调用返回的类型就是Map.Entry<K, V>,而得到的结果是nextNode()方法的返回值。
nextNode()方法的作用就是返回下一个结点。
而Entry是Map的内部接口,该Entry接口有几个方法可以设置或得到键值。
所以能够通过entry.getKey()和entry.getValue()方法获取到键和值。
并且Node<K, V>是Map.Entry<K, V>的实现类。
到此,相信大家对“Java高级之HashMap中的entrySet()方法怎么使用”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://blog.csdn.net/cnds123321/article/details/113792345