• Java中的Map接口--HashMap[76]


    Java中的Map接口–HashMap[76]




    一、Map接口

    Map接口:将键映射到值的对象,一个映射表不能有重复的键,每个键最多映射一个值;

    1.键值对存储一组对象;
    2.key不能重复,value可重复;
    3.具体的实现类有:
    1.HashMap;2.TreeMap;3.Hashtable;4.LinkedHashMap;

    二、HashMap简介

    基于哈希表的Map接口的实现类,允许使用null值和键,不保证顺序恒久不变;
    实现原理:

    1.基于哈希表,由数组+链表+(jdk1.8之后)二叉树{又叫红黑树,只标记了红red};
    2.默认加载因子为0.75(百分之七十五):表示数据存储达到75%后要创建新数组或扩容;默认数组大小是16;
    3.把对象存储到哈希表中,如何存储?
    答:把key对象通过hash()方法计算哈希值,然后用这个哈希值对数组长度取余数,来决定该key对象存储在数组中的位置,当这个位置有多个对象时,再以链表结构存储,jdk1.8之后,当链表长度大于8时,链表转换为红黑树(二叉树)存储;
    这样的目的,是为了取值更快,存储的数据越大,性能消耗越少,表现越明显;
    4.扩充原理:当数组容量超过了75%,表示数组需要扩充,如何扩充?
    答:扩充的算法是:当前数组容量<<1(相当于乘2),扩大一倍,每次扩充表示哈希表重新散列(重排序,重新计算每个对象的存储位置),扩充次数多了影响性能.
    5.线程不安全,适合单线程;


    三.代码演示

    private static void HashMap(){
        Map<Integer,String> map=new HashMap<>();
        map.put(1,"贝贝");
        map.put(2,"京京");
        map.put(3,"欢欢");
        map.put(4,"莹莹");
        map.put(5,"妮妮");
        //获取键的值
        System.out.println(map.get(1));
        //forEach取值
        map.forEach((k,v)->System.out.println(k+"-->"+v));
        //使用entryset返回一个set集合,遍历map
        Set<Map.Entry<Integer,String>> set=map.entrySet();
        for (Map.Entry e:set){
            System.out.println(e.getKey()+"-->"+e.getValue());
        }
        //通过keySet获取键,再使用键获取值
        Set<Integer> set2=map.keySet();
        for (Integer i:set2){
            String v=map.get(i);
            System.out.println(i+"--->"+v);
        }
        //通过values方法获取map的值,返回一个collection对象;
        Collection<String> collection=map.values();
        for (String s:collection){
            System.out.println(s);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    四.小结

    本章对Java中的Map接口–HashMap进行了概述及演示,map接口在Java中是比较常用的数据封装的接口,尤其是HashMap,最为常用,所以本章为重点;
    有哪里不足或者有更好的建议,欢迎留言吐槽,有哪里不懂的小伙伴,可以私信我,我会一一答复,感谢认可,感谢支持!

  • 相关阅读:
    JavaScipt基础(持续更新一)
    Java小技能:利用反射获取整个项目的枚举字典
    UE5如何实现语言本地化管理(中英文切换)
    VSS、VDD、VBAT、VSSA
    java基于mvc的高校教师科研信息管理系统
    FPGA/IC笔试题汇总
    EureKa详解:微服务发现与注册的利器
    Android 通知
    变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用
    BI系统上的报表怎么导出来?附方法步骤
  • 原文地址:https://blog.csdn.net/weixin_45539338/article/details/127753235