java的Map浅析

Map<K,V>是以键-值对存储的(key-value),

Entry<K,V>是Map中的一个接口,Map.Entry<K,V>接口主要用于获取、比较 key和value.

具体的结构如下:

其中,getKey()用于获取key,而getValue()用于获取value,setValue()用于设置value,comparingByKey()等方法则用于比较.

另外,Map中除了Entry<K,V>接口,put(),get(),remove(),还有entrySet()、values()、keySet()等方法。


values()返回value组成的Collection ,keySet()返回key组成的Set .

entrySet()返回一个Map.Entry<K,V>类型的Set集合

Map.Entry<K,V>接口和entrySet()方法经常用来遍历map。

示例如下:

        Map<Integer,String> fruits=new HashMap<Integer,String>();
        fruits.put(1,"banana");
        fruits.put(2,"apple");
        //遍历entrySet()返回的Set,其中每一个元素都是Map.Entry类型的,再通过getKey()、getValue()获取键值对
        for (Map.Entry<Integer, String> entry : fruits.entrySet()) {
            System.out.println(entry.getKey() + "  " + entry.getValue());
        }

接下来再看下HashMap类,HashMap类实现了Map<K,V>接口,

HashMap就是用数组和链表来存储数据的,HashMap中默认有一个长度为16的数组,数组的每个元素中存储一个链表的头结点。


在HashMap类中的内部类Node<K,V>实现了Map.Entry<K,V>接口,
这个Node类可以理解成链表的节点,存储着hash值,key,value,和下一个节点。
具体的结构如下:

在HashMap类中,当调用get方法()时,会先通过getNode()方法来获取Node<K,V>,再返回Node<K,V>中的value。

参考博客:https://blog.csdn.net/huyuyang6688/article/details/52388682#t1

原文地址:https://www.cnblogs.com/expiator/p/6114420.html