Map集合

Map集合,第1张

Map集合

Map接口:键(key)值(value)对存储,是双列集合。

(键不可以重复,值可以重复)

Map接口有三个实现类:

1、HashMap (线程不安全,hash表+红黑树+链表结构)

2、TreeMap(底层红黑树实现)

3、Hashtable(线程安全)

HashMap常用方法

1、put方法向HashMap集合中添加元素

HashMap map=new HashMap<>();
        map.put("a", "a");
        map.put("b", "a");
        map.put("c", "a");
        map.put("a", "ss");

底层数组用来定位元素位置,元素Hash值除以数组长度=位置,但有可能不同元素的不同的Hash值计算出的位置却是一样的,所以用链表来存储相同位置元素。

put方法具体过程:当向其中添加元素时,先用Key值计算出Hash值,通过hash算法计算出此元素在hash数组中的位置,如果这个位置上没有元素,则直接将其插入(Node),当我们在此插入值时,如果计算出的位置上已经有了元素,则直接向元素的下一位添加(此时是链式结构),当这个链表长度等于八时,链表自动转化为红黑树(当我们删减元素时,如果删到链表长度为6时,则红黑树自动有转换会链表),当哈希数组的长度被使用了0.75倍时,hash数组会进行2倍扩容(数组长度必须为2的倍数,相当于我们舍弃了一部分空间来换取了效率)。

注:当元素插入位置已有元素时,会有三种情况:

有重复元素(键),则只替换值即可。

链表,直接向后插入即可。

红黑树,直接添加即可。

要注意,以上的代码实现均是源码底层put方法已实现好的,我们只需了解清除原理即可。

 

2、其他常用方法:

  //常用方法
        map.remove("a");//由key值来删除整对
        System.out.println(map.get("b"));//通过key来找value,返回的是value值
        map.containsKey("b");//判断有没有这个键
        map.containsValue("a");//判断有没有这个值
        Set kset=map.keySet();//此方法返回的是这个HashMap的所有key,用set集合来存储,值不可以重复
        Collection list=map.values();//返回这个的Map集合的值

总之,HashMap中的put方法值得我们去深思。

TreeMap:底层红黑树实现,key所在类必须实现Comparable接口,可以按照值自然顺序排序,

也是键值两列,其余与TreeSet类似。

HashTable:线程安全的,其中不能存储key为null的元素,底层也是hash结构,但他是线程安全的,在并发量较低的情况下使用。

Map集合的迭代问题:

增强for:

HashMap map=new HashMap<>();
        map.put("a", "a");
        map.put("b", "a");
        map.put("c", "a");
        map.put("a", "ss");
        //第一种遍历方式   遍历:指找到所有key和value
        Set set=map.keySet();//先获取所有键
        for(String key:set){
            System.out.println(key+"="+map.get(key));//通过键来找值
        }

通过Entry类来遍历Map集合(建议使用):

map底层为了方便遍历,将键和值都存入了一个Entry对象中,并将多个Entry对象即多个元素放到一个Set集合中,当我们要使用时,直接调用Map中的entryset方法获得这个集合即可。

  Set> entrySet=map.entrySet();//获得这个Entry集合
        for(Map.Entry s:entrySet){
            System.out.println(s.getKey()+"="+s.getValue());
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5684195.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存