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

一、HashMap

Java集合数据结构——HashMap&HashSet_第1张图片

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

1.Map 的常用方法

Java集合数据结构——HashMap&HashSet_第2张图片

(1)关于Map.Entry的说明

Map.Entry 是Map内部实现的用来存放键值对映射关系的内部类,该内部类中主要提供了的获取,value的设置以及Key的比较方式 。

Java集合数据结构——HashMap&HashSet_第3张图片

2.HashMap注意事项

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

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

Java集合数据结构——HashMap&HashSet_第4张图片

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

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常用方法

Java集合数据结构——HashMap&HashSet_第8张图片

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,数据结构,java)