Java集合数据结构——HashMap&HashSet

2021/9/16 1:04:58

本文主要是介绍Java集合数据结构——HashMap&HashSet,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一、HashMap

在这里插入图片描述

Map是一个接口类,该类没有继承自Collection,该类中存储的是<K,V>结构的键值对,并且K一定是唯一的,不能重复。

1.Map 的常用方法

在这里插入图片描述

(1)关于Map.Entry<K, V>的说明

Map.Entry<K, V> 是Map内部实现的用来存放<key, value>键值对映射关系的内部类,该内部类中主要提供了<key, value>的获取,value的设置以及Key的比较方式 。
在这里插入图片描述

2.HashMap注意事项

当new一个 HashMap不给任何参数的时候,大小为0

HashMap<String,Integer> map = new HashMap<>();

![在这里插入图片描述](https://www.www.zyiz.net/i/ll/?i=3a2db60dd69b4cc0b1c62

在这里插入图片描述
1.HashMap什么时候开辟bucket数组占用内存?
在第一次put的时候才开辟内存。
1.首先对key求 hashcode,第一次put的时候,容量才真正有了,大小是16
2.然后找下标尾插
3.处理红黑树:当数组容量大于64,且链表的长度超过8
在这里插入图片描述
2.当 new 一个HashMap给参数时大小是多少
假设给的容量是19,那么HashMap的大小就是25也就是32,通过源码可以看到,
也就是说HashMap的大小一定是2的多少次幂,且 2n >= 给的容量大小。这个2次幂一定是大于等于你给的容量。
在这里插入图片描述

3.HashMap何时扩容?
根据负载因子0.75,大于0.75就会扩容
4.当两个对象HashCode相同会发生什么?
会发生哈希碰撞
5.如果两个键的 HashCode 相同,如何获取值对象?
在当前 HashCode 的数组位置开始遍历链表
6.重新调整HashMap大小存在什么问题吗?
会直接重新哈希

3.注意

1.Map中存放键值对的Key是唯一的,value是可以重复的
2.Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复
3.Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)
4.Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入

二、HashSet

1.Set常用方法

在这里插入图片描述

2.Set 注意事项

1.Set是继承自Collection的一个接口类
2.Set中只存储了key,并且要求key一定要唯一
3.Set的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
4.Set最大的功能就是对集合中的元素进行去重
5.实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础上维护了一个双向链表来记录元素的插入次序
6.Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入


完!



这篇关于Java集合数据结构——HashMap&HashSet的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程