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

本文介绍了Java中的Map接口及其实现类HashMap。HashMap基于哈希表,允许使用null键值,不保证顺序。文中详细讲解了HashMap的存储原理、加载因子、扩容机制,并通过代码演示了HashMap的基本操作,如put、get、遍历等。此外,还讨论了HashMap的线程不安全性及其在Java应用中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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);
    }
}

四.小结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

aqi00008B

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值