Java_HashMap的工作原理(Jdk1.8)

本文详细解析HashMap的工作原理,包括基本特性、存储方式、put/get方法实现、hash算法以及resize机制。HashMap使用数组+链表+红黑树的数据结构,保证高效查找。JDK1.8中,当链表长度超过8,会转换为红黑树,以解决链表过长导致的性能问题。此外,文中还讨论了HashMap的扩容策略和非线程安全性,提出在多线程环境下使用HashMap的注意事项。
摘要由CSDN通过智能技术生成

本文主要是从以下几个方面对HashMap进行分析:

一:什么是HashMap以及HashMap的基本特性有哪些?

二:HashMap的基本工作原理是什么?

三:关于put(),get()方法在源码层面是怎么实现的?(对put的源码做重点分析)

四:HashMap中的hash算法是如何实现的?

五:HashMap使如何进行resize的?

六:关于HashMap还可以深入了解的一些问题是什么?




一:HashMap简析以及HashMap的基本特性

基于哈希表的Map 接口的实现。此实现提供所有可选的映射操作,并允许使用null 值和null 键。(除了非同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。

这里需要注意的几点就是,基于Map接口,映射操作,允许null键值,非同步,不保证映射的顺序,不保证顺序的恒久不变。

经常我们一提到HashMap就会想到的词就是键值对,那个什么是键值对?看下面的一段代码:

HashMap<String,String> map1=new HashMap<String,String>();
	  map1.put("语文","王老师");
	  map1.put("数学","李老师");
	  map1.put("英语","张老师");
	  map1.put("化学","刘老师");
	  map1.put("生物","孙老师");
	  map1.put("物理","周老师");
	  map1.put("政治","吴老师");
	  map1.put("地理","赵老师");
      for(Entry<String,String> entry:map1.entrySet()){
		  System.out.println(entry.getKey()+"----"+entry.getValue());
	  }

这里用到了put方法,将"语文"和"王老师"构成了一组键值对,"语文"是键,"王老师"是值,就好像是这种关系---"语文"->"王老师",这样将他

  • 7
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
HashMapJava中常用的数据结构之一,它基于哈希表实现。在JDK 1.8中,HashMap的底层实现主要包括数组和链表(或红黑树)两部分。 首先,HashMap内部维护了一个Entry数组,每个Entry对象包含了键值对的信息,包括键、值和指向下一个Entry的指针。数组的长度是固定的,但可以根据需要进行扩容。 当我们向HashMap中插入一个键值对时,首先会根据键的hashCode()方法计算出一个哈希值。然后,通过哈希值与数组长度取模的方式确定该键值对在数组中的位置。如果该位置上已经存在其他键值对,就会发生冲突。 解决冲突的方法是使用链表或红黑树。在JDK 1.8中,当链表长度超过一定阈值(默认为8)时,链表会转换为红黑树,以提高查找效率。这样,在插入、删除和查找操作时,可以通过哈希值快速定位到对应的链表或红黑树,然后再在链表或红黑树中进行操作。 当我们需要查找一个键对应的值时,HashMap会根据键的哈希值找到对应的位置,然后遍历链表或红黑树来找到具体的键值对。 需要注意的是,HashMap并不保证元素的顺序,即插入和遍历的顺序不一定相同。如果需要有序的集合,可以考虑使用LinkedHashMap。 总结一下,JDK 1.8HashMap的底层原理主要是通过数组和链表(或红黑树)来实现,通过哈希值快速定位到对应的位置,然后在链表或红黑树中进行操作。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值