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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 红旗Red Flag Linux 安装图解「建议收藏」

    红旗Red Flag Linux 安装图解「建议收藏」红旗RedFlagLinux安装图解http://hi.baidu.com/akkelv/blog/item/44192833618ef0ff1b4cff2f.html

    2022年8月20日
    4
  • 【大物第七版·电磁感应 电磁场理论】感生电动势 感生电场总结

    【大物第七版·电磁感应 电磁场理论】感生电动势 感生电场总结感生电动势 导体回路不动 磁场发生变化产生的电动势感生电场 变化的磁场在其周围激发了一种电场表示感生电场的 场强注意是负号在自然界中存在着两种以不同方式激发的电场 所激发电场的性质也截然不同 由静止电荷所激发的电场时保守力场 无旋场 在该场中电场强度沿任一闭合回路的线积分恒等于 0 即但变化磁场所激发的感生电场沿任一闭合回路的线积分一般不等于 0 而是有 说明感生电场不是保守力场

    2025年9月30日
    3
  • 前端进阶(1)Web前端性能优化

    前端进阶(1)Web前端性能优化前端进阶(1)Web前端性能优化Web前端性能优化,不仅能够改善站点的用户体验,并且能够节省相当的资源利用。下面将从1)服务器、2)html内容、3)css、4)javascript、5)图片等几方面介绍具体的优化操作。目录:1.服务器优化1.1.使用内容分发网络(CDN)1.2.服务器使用http2.0协议1.3.GZIP压缩1.4.使用浏览器缓存1.5…

    2022年6月22日
    27
  • 查看Vue版本 node.js版本vue-cli版本

    查看Vue版本 node.js版本vue-cli版本查看node.js版本node-v查看vue版本npmlistvue或者进入项目中package.json文件直接查看查看Vue-cli版本vue-V或者vue–version

    2022年5月10日
    227
  • 从中国历年人口数据简单分析未来房价走势(本分析仅供参考)

    从中国历年人口数据简单分析未来房价走势(本分析仅供参考)以下数据来自中国统计局官方网站从1981-1997的连续17年,中国每年人口净出生人口都在2000万以上。从1998年开始,逐年减少,从2001年开始至2017年,每年净出生人口基本在1600万左右。所以在最近十五年,正是赶上1981-1997出生的这一波人要买房,因此把房价无情地快速推高。随着这批人买房需求的满足,房屋需求开始下降,这也解释了为什么这几年一直有人在喊房价要降,并且…

    2025年9月13日
    8
  • Git查看当前分支_git查看远程分支上的文件

    Git查看当前分支_git查看远程分支上的文件gitbranch-vv

    2022年8月22日
    7

发表回复

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

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