Map.Entry接口
Map里面是如何进行数据存储的?
对于List而言(LinkedList子类)依靠的是链表的形式实现的数据存储,那么在进行数据存储的时候,一定要将数据保存在一个Node的节点之中,虽然在HashMap里面也可以见到Node类型定义。通过源代码定义可以发现HashMap类中的Node内部类本身实现了Map.Entry接口。
static class Node<K,V> implements Map.Entry<K,V> {}
所以得出的结论就是:所有的key和value的数据都被封装在Map.Entry接口之中,而此接口定义如下:
public static interface Map.Entry<K,V>
并且在这个内部接口里面提供了两个重要的操作方法:
- 获取key:K getKey();
- 获取value:V getValue();
在JDK1.9版本之中,使用者基本上都不会去考虑创建Map.Entry的对象,实际上在正常的开发过程中,使用者也不需要关心Map.Entry对象,可是从JDK1.9以后,Map接口里面追加有新的方法:
- 创建Map.Entry对象:static <K,V> Map.Entry<K,V> entry(K k, V v);
范例:创建Map.Entry对象
import java.util.Map;
public class MapDemo {
public static void main(String[] args) {
Map.Entry<String,Integer> map = Map.entry("one",1);
System.out.println("获取key:"+map.getKey()
+"获取value:"+map.getValue());
System.out.println(map.getClass().getName()); //观察使用的子类
}
}
获取key:one获取value:1
java.util.KeyValueHolder
通过分析可以发现整个Map集合里面,Map.Entry的主要作用就是作为一个key和value的包装类使用,而在大部分情况下进行存储的时候都会将key跟value包装为一个Map.entry对象进行使用。