ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JavaSE进阶(九)——Map

2021-12-04 13:32:45  阅读:134  来源: 互联网

标签:Map 进阶 映射 value HashCode key JavaSE HashMap


JavaSE进阶(九)——Map

前言

Map的基本结构有两个组成,一个是key,一个是value;这两个代表一个整体元素,key就是唯一标识这个元素的。同时Map的内部组成是无序的,它在插入的时候要经过Hash算法做取余操作。

本篇笔记较为复杂,所以大家谨慎观看,多看几遍。

文章目录

Map

前言中有过描述,<key,value>这种结构叫做键值对,官方描述:将键映射到值的对象,且一个映射不能包含重复的键;每个键最多只能映射到一个值(多个键映射一个值是允许的)。

说到这大家有没有回忆起什么?函数映射。就是这个道理。另外记住一句话:所有计算机的问题都可以使用数学思想来解释。

HashMap

HashMap中我们可以将key和value设置为null;

至于如何使用我不想说了,大家都写。我写点不一样的。

默认HashMap 长度为16,负载因子为0.75;上一篇笔记中已经记录了扩容的公式,现在来说一些根据什么来确定位置。

我们已经知道了每个对象都有一个HashCode且唯一标识,我们通过HashCode与16取余,计算出一个下标,然后将当前元素放在对应的下标下。那么HashCode的计算方式如何呢?

public int hashCode() {
	int h = hash;
	if (h == 0 && value.length > 0) {
		char val[] = value;
    	for (int i = 0; i < value.length; i++) {
        	h = 31 * h + val[i];
		}
    	hash = h;
	}
	return h;
}

大家看不懂没关系,不需要大家看懂,只需要知道我们的HashCode是更具对象中的属性值以及其他数据计算出来的数值。

注意

在此提醒各位同学去看我另一篇笔记,面试会考,如果你能将那篇博客中的逻辑理解,那么这道题在面试中不会难住你了。

HashMap在JDK1.8发生的变化

HashTable

面试中可能会问到HashTable,这玩意已经被淘汰了,它是HashMap的前身,主要特点如下:

  • 初始长度11;
  • 线程安全;
  • 不允许空值;
  • 作为key的类必须实现equals和HashCode方法;

【注】:毕业后,如果还有公司面试问这个……,呵呵,你懂的。

总结

Map的使用就那么一点玩意,真的是懒得说,至于它的底层我会在数据结构专栏中进行详细说明,两周后开始更新。

标签:Map,进阶,映射,value,HashCode,key,JavaSE,HashMap
来源: https://blog.csdn.net/qq_40749255/article/details/121714505

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有