ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java 集合

2021-11-28 01:02:08  阅读:120  来源: 互联网

标签:扩容 java 16 ArrayList 接口 链表 数组 集合


一、java集合:

1.collection接口的子接口:set接口跟list接口

2.map接口的实现类:hashMap、hashTable、concurrentHashMap、hashTable、treemap;

3.set接口的实现类:hashSet、LinkedHashSet、treeSet;

4.List接口的实现类:ArrayList、LinkedList、vector等;

 

 

二、java集合详细说明:

 

1.List:

 

         ArrayList:  有序、非线程安全、值可以为null、值可以重复,底层实现Object数组,它实现了Serializable接口,因此它支持序列化;

       优点:查询快,插入、删除慢;

 

          ArrayList的动态扩容:

 

 

       linkedList:有序、非线程安全、底层实现是链表,插入、删除快,查询效率不高;

      vector:跟ArrayList结构相似,死线程安全的,加了synchronized;

2.Map:

     HashMap:

          底层实现原理:jdk1.8之前,hasMap是数组+链表;jdk1.8之后,数组+链表+红黑树,当链表超过8的时候,链表就会转化为红黑树,利用红黑树快速增、删、改、查的特点提高HashMap的性能;

          

 

 

 

         

 

加载因子loadFactory:默认为0.75,初始化容量initialCapacity:默认为16,加载因子存在的原因:为了减少哈希冲突,如果初始桶为16,等到满16个元素才扩容,某些桶里可能就不止一个元素了,所以加载因子默认为0.75,也就是说大小为16的HashMap, 到了第13个元素就会扩容成32;

 阀值threshold:一般为capacity*loadFactory;扩容的时候会用到阀值;

 

当发生哈希冲突,并且元素数量大于阀值的时候,就会扩容,扩容时需要创建一个为之前数组长度2倍的新的数组,然后将当前的Entry数组中的元素全部传输过去;

 

 旧的数组的大小如果已经最大(2^30)了,那么将不再扩容,将阀值设定为int的最大值;如果没有,那就初始化一个原来数组长度两倍的新的数组,将数据转移到新的数组;

 

                

       

标签:扩容,java,16,ArrayList,接口,链表,数组,集合
来源: https://www.cnblogs.com/xiaoxiao1120/p/15612915.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有