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[]数组扩容