您的位置:首页 > 职场人生

深入了解HashMap,让你面试多一份自信

2020-08-28 16:01 495 查看

HashMap的具体认识

HashMap是一个集合,也是Map接口的常用子类,它同时也继承了AbstractMap抽象类,是采用散列的方式进行存储。当然这还不能体现出HashMap的独特性。但是我告诉你它能操作一对对象,就是说这个集合是两列的,第一列是Key,第二列是value,类似于下面这种情况:

key value
张三 123456

这个key就像是数据库中的主键,是唯一标识后面value的列。所以key不可以有重复值。
所以它的创建格式为:

在这里插入代码片
Map<Integer, String> map = new HashMap<Integer, String>();

怎么样,在<>里有两个数据类型吧,它们分别代表key和value的数据类型。

在很多时候我们在集合里进行查找对象都有点令人费解,比如我们在Set集合里,我们把对象放入集合中,而当我们要找这个对象时,却需要先提供这个对象,既然我们都有这个对象,还找它干嘛呢?唯一能解释得通的原因,就是我们想确定这个集合里有没有我们找的对象。

那么当我们的集合是两列,我们就可以通过第一列的key值来进行查找,我们就不需要提供我们要查找的对象,就可帮解决我们这个问题。
它的查找只需要提供key值就行了,它的查找格式为

在这里插入代码片
map.get(key值);

HashMap的简单操作

现在我简单的操作一波。

HashMap的添加、查找

方法用到了

创建HashMap集合,同时给它们设置数据类型

在这里插入代码片
Map<key, value> map = new HashMap<key, value>();

添加 方法 ,同时添加key值与value值

在这里插入代码片
map.put(key,value);

查找方法,根据key值进行查找value值的内容

在这里插入代码片
map.get(key);

解析

看这个图,我们可以得知value值或者key值都可以添加为空的,并且彼此不影响。

因为基于哈希表的Map接口的实现。此实现提供了所有可选的映射操作,并允许null值和null键

但是我们的Key值不允许重复,如果一旦发生重复,我们就会发生value值覆盖问题,此时就会获取新的value值。

还有就是根据指定的 key 找到value,如果没有找到,则返回 null.

HashMap的遍历

我用到了迭代器,用来遍历集合。
我们先获取全部的Key。用Set集合存放它,因为Set集合不允许有重复值,满足key值不允许重复的要求
获取方法为

在这里插入代码片
Set<String> set = map.keySet();

然后创建迭代器

在这里插入代码片
Iterator<String> iter = set.iterator();

然后进行循环遍历,遍历条件为iter.hasNext(),这个方法标识如果迭代具有更多元素,则返回 true。而每个元素都是我们的Key的值。然后我们根据这个key的值就可以找出我们的value值,这样就同时遍历出key与value了。

HashMap的一些特性

HashMap基于哈希表

哈希是一种数据结构,而我们常见的数据结构有数组、二叉树、栈、队列等等。特别是数组,我们通常根据下标去查找它的元素,一下就可查找出来。
我们的哈希表也是如此,可以说哈希表利用了这种特性,它的主干就是数组。但是我们知道数组也有它的缺点,它要插入的时候就极不方便,它一旦要插入一个数,那它插入的这个位置后面所有的数都得往后移。
那我们的哈希表呢?它的这种问题叫哈希冲突,也叫哈希碰撞,意思就是在进行插入的时候,或添加的时候,发现存储位置被其他元素占用了。但哈希表没有采用像数组那样解决的方式,它采用的是链地址法,也就是数组+链表的方式。这个链表就是为了解决哈希冲突而存在的,如果我们这个哈希表没有链表,那么就和数组一样,查找,添加操作很快,时间复杂度就为O(1),但如果有链表,对于添加操作,它就需要一个一个节点去遍历,那么时间复杂度就为O(n)。所以,HashMap的链表出现越少,性能
也就越好。

HashMap的影响参数

HashMap的实例有两个影响其性能的参数: 初始容量和负载因子 。
容量是哈希表中的桶数,初始容量只是创建哈希表时的容量。
加载因子是在自动增加容量之前允许哈希表获取的完整程度的度量。 HashMap默认的加载因子为0.75,初始容量为16。

当哈希表中的条目数超过加载因子和当前容量的乘积时,就是当条目标数超过16*0.75,也就是超过12时,哈希表将被重新哈希(即,重建内部数据结构),以便哈希表具有大约两倍的桶数。也就是会扩展两倍初始容量。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: