在学习Map集合的遍历方法时,遇到了如下语句:
Map<String,Integer> map = new HashMap<>();
Set<Map.Entry<String,Integer>> set = map.entrySet();
Map.Entry<K,V>是Map内的一个静态内部接口,在网上搜索时发现它的实现类为Entey,可在HashMap的源码中找了半天找不到这个Entry实现类。
原来在jdk1.8中对HashMap类进行了重点更新
关于 HashMap 1.8 的重大更新
HashMap
中的数组元素 & 链表节点 采用 Node
类 实现
与 JDK 1.7
的对比(Entry
类),仅仅只是换了名字
Set<Map.Entry<String,Integer>> set = map.entrySet();
entrySet()方法返回了一个实现了Map.Entry<>的接口的Node类对象,这个对象包含了键值对和链表结点。
相当于一个接口的多态
Map.Entry<String,Integer> map = new HashMap.Node<String,Integer>();
以上代码无法实现,因为Node类是静态私有的,不能直接调用,需要调用map对象的enrtySet()方法直接返回一个集合来接受Node类的对象集合。