曂沅仴駦 发表于 2022-8-13 04:23:07

java集合 总结篇

List
ArrayListhttps://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221344427-658276518.png 
 Vector
https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221451316-1880462748.png
 
 LinkList
https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221530359-170370960.png
 
 
Set
HashSethttps://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221632644-882181899.png 
 TreeSet
https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221648975-697565245.png
 LinkedHashSet
https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221707062-1574340799.png
 
 
Queue
https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221741516-972707433.png
 
 
Map
https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221808739-1959006525.png
 
 https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221825417-1431917162.png
 
 https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625221842957-1738802185.png
 
 https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625222648250-1999507376.png
 
 
大方向上,HashMap 里面是一个数组,然后数组中每个元素是一个单向链表。上图中,每个绿色

的实体是嵌套类 Entry 的实例,Entry 包含四个属性:key, value, hash 值和用于单向链表的 next。

capacity:当前数组容量,始终保持 2^n,可以扩容,扩容后数组大小为当前的 2 倍。

loadFactor:负载因子,默认为 0.75。

threshold:扩容的阈值,等于 capacity * loadFactor 
 https://img2022.cnblogs.com/blog/2575225/202206/2575225-20220625222709178-1389702340.png
 
 
Java8 对 HashMap 进行了一些修改,最大的不同就是利用了红黑树,所以其由 数组+链表+红黑树 组成。

根据 Java7 HashMap 的介绍,我们知道,查找的时候,根据 hash 值我们能够快速定位到数组的具体下标,但是之后的话,需要顺着链表一个个比较下去才能找到我们需要的,时间复杂度取决

于链表的长度,为 O(n)。为了降低这部分的开销,在 Java8 中,当链表中的元素超过了 8 个以后,会将链表转换为红黑树,在这些位置进行查找的时候可以降低时间复杂度为 O(logN)。 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: java集合 总结篇