day16 Map Set

ArrayList

底层是数组-连续的内存空间 --查询快,增删慢 (扩容&缩容)

LinkedList

底层是链表--不连续的内存空间 -- 查询慢,增删快 

注意:LinkedList还提供了很多针对首尾进行操作的API

Set

1.set中的数据是无序的

2.set不允许存重复的数据,允许有null,但也最多一个

3.如果自定义对象想去重,需要重写equals()与hashCode()

Map

1.map的结构是<K,V>表示的是一对键值(映射关系)

2.Entry<K,V>--Map底层就是Entry[]

3.hashMap数据存储过程

1)会拿到当前entry中的key做运算,得出当前这个entry应该放在entry[]的哪个位置

2)如果两个entry的key值经过运算,余数相等,表示这两个entry的数组下标一致

        这个现象就是hash冲突 / hash碰撞

3)如果存在冲突的情况,可以把新entry链接在旧entry之和,形成链表

4)当链表长度大于8时会转成红黑树,小于6时会回复成链表

结论:HashMap底层结构:数组+链表 或者 数组+红黑树

4.拓展:树的数据结构研究的思路:

树 ->       二叉树  ->      平衡二叉树  ->      红黑树

5.我们有两个指标会影响hashMap的查询效率

        容量:会约等于2倍的方式扩容--初始容量16

        加载因子:存到什么程度就扩容--0.75f

注意:不管怎么设置,要避免频繁的rehash,Entry[]数组扩容

上一篇:三阶段CGB2105-Day16


下一篇:NazoHell 攻略