java 集合

java 集合一、java集合:1.collection接口的子接口:set接口跟list接口2.map接口的实现类:hashMap、hashTable、concurrentHashMap、hashTable、

大家好,又见面了,我是你们的朋友全栈君。

一、java集合:

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

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

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

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

<span role="heading" aria-level="2">java 集合

 

 

二、java集合详细说明:

 

1.List:

 

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

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

 

          ArrayList的动态扩容

 

 

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

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

2.Map:

     HashMap:

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

        entry数组包含 key、val、hash值、next对象;

          <span role="heading" aria-level="2">java 集合

 

 

 

         <span role="heading" aria-level="2">java 集合

 

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

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

<span role="heading" aria-level="2">java 集合

 

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

<span role="heading" aria-level="2">java 集合

 

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

     concurrentHashMap:

         concurrentHashMap的数据结构

     在jdk1.7之前是segment数组+hashEntry数组,segment实际继承自可重入锁(ReentrantLock),在concurrentHashMap中扮演锁的角色,hashEntry则用于存储键值对数据,一个concurrentHashMap包含一个segment数组,一个segment包含一个hashEntry数组,称为table,每个HashEntry是一个链表结构的元素;

               <span role="heading" aria-level="2">java 集合

 

 在get和put操作中,是如何快速定位元素放在哪个位置的

                对于某个元素而言,一定是存放在某个segment下的某个table元素中:

定位segment:取得key的hashcode值,进行一次再散列,拿到散列值后,以再散列值的高位进行取模,得到当前元素在哪个segment上;

定位table:取得key的再散列值,用再散列值的全部和table的长度进行取模,得到当前元素在table的哪个元素上;

       

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154506.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 工控机上位机软件的开发历程(一)

    工控机上位机软件的开发历程(一)本人就职于一家环境监测公司,上位机软件的主要功能是采集各仪器的数据,然后存储起来,并传送到环保局平台。刚到公司的时候,公司使用的是组态软件(用以显示流程图),然后再开发了报表软件、数据上传软件。因为组态软件使用的是标准Modbus协议,而很多仪器使用的协议根本就是自定义的,所以还要加一个协议转换软件,把各种各样的协议转换成Modbus协议,让组态软件去读。除此之外,我们还希望软件能够开机启动,…

    2022年5月6日
    135
  • C# excel转换Json

    C# excel转换Json//如果要支持xlsx格式表格,请在本机电脑安装这个//http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b0da-1463960fdcdb/AccessDatabaseEngine.exe参考案例:https://www.cnblogs.com/fengxiang/p/3551621.html使用的时候记得…

    2022年6月11日
    57
  • 什么是gan网络_DAN网络

    什么是gan网络_DAN网络引言GAN,全称GenerativeAdversarialNetworks,中文叫生成式对抗网络,了解GAN,私下我喜欢叫它为“内卷”网络,为啥这么说,我们先来看一个故事!!!01警察与小偷的故事在宇宙的某个星球,某个地方有一个城市,这个城市是一个新兴城市,各种制度建设还不完善,所以城市的治安很混乱,很快,这个城市就出现了很多小偷。当然,现在这批小偷能力层次不齐,有的是盗窃高手,有的是一个毫无技术的小憨憨。小偷盛行,市民投诉反馈,这个城市就开始整治…

    2025年6月27日
    3
  • MyEclipse10激活成功教程_MyEclipse激活码

    MyEclipse10激活成功教程_MyEclipse激活码myEclipse10可以去很多地方下载,我这里是从电脑管家下载的,下载完成后安装,安装很简单,不在多说安装完成后会发现你只有一个月的试用时间,我们就需要激活成功教程,这里需要下载一个激活成功教程补丁https://pan.baidu.com/s/1ivE2yauZRDdDq8zBxpK06A可以去网盘里下载,下载后解压,会有如下文件然后运行run.bat,会出现这个界面…

    2022年9月30日
    4
  • ubuntu16.04安装pycharm_pycharmlinux安装

    ubuntu16.04安装pycharm_pycharmlinux安装1.安装包下载进入https://www.jetbrains.com/pycharm/download/download-thanks.html?platform=linux

    2022年8月27日
    5
  • currentStyle getComputedStyle「建议收藏」

    注意:getComputedStyle是firefox中的,     currentStyle是ie中的. 比如说&lt;style&gt;    #mydiv{           width:300px;    }&lt;/styke&gt; 则:varmydiv=document.getElementById(‘mydiv’);…

    2022年4月7日
    46

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号