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


相关推荐

  • java查找字符的方法_Java字符串查找(3种方法)

    java查找字符的方法_Java字符串查找(3种方法)在给定的字符串中查找字符或字符串是比较常见的操作。字符串查找分为两种形式:一种是在字符串中获取匹配字符(串)的索引值,另一种是在字符串中获取指定索引位置的字符。根据字符查找String类的indexOf()方法和lastlndexOf()方法用于在字符串中获取匹配字符(串)的索引值。1.indexOf()方法indexOf()方法用于返回字符(串)在指定字符串中首次出现的索引位置,…

    2025年6月8日
    1
  • acwing-395. 冗余路径(Tarjan双连通分量)

    acwing-395. 冗余路径(Tarjan双连通分量)为了从 F 个草场中的一个走到另一个,奶牛们有时不得不路过一些她们讨厌的可怕的树。奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分离的路径,这样她们就有多一些选择。每对草场之间已经有至少一条路径。给出所有 R 条双向路的描述,每条路连接了两个不同的草场,请计算最少的新建道路的数量,路径由若干道路首尾相连而成。两条路径相互分离,是指两条路径没有一条重合的道路。但是,两条分离的路径上可以有一些相同的草场。对于同一对草场之间,可能已经有两条不同的道路,你也可以

    2022年8月9日
    4
  • Ti杯电子竞赛前期准备工作

    Ti杯电子竞赛前期准备工作标题竞赛时间和竞赛周期:1997年开始每二年举办-届,竞赛时间定于竞赛举办年度的9月份,赛期四天三夜(具体日期届时通知)。在双数的非竞赛年份,组织开展全国的专题性竞赛。竞赛方式:全国统一-命题、分赛区组织的方式。采用“半封闭、相对集中”的组织方式进行。学生可查阅纸介或网络技术资料,队内学生集体商讨设计,分工负责、团结协作,以队为基本单位独立完成竞赛任务;竞赛期间不允许任何教师或其他…

    2022年5月7日
    93
  • 1.7-工控上位机软件开发平台介绍

    1.7-工控上位机软件开发平台介绍一、前言前面几章一直没有提到上位机的另一个主要使用场合,即“工业上位机软件”。主要是因为本人没有接触过,不敢贸然发表见解类的文章。最近在机缘巧合下,对“工业上位机软件”有了一些初步的了解。在这里和大家分享一下。注意本节的内容还不够专业全面,只适合对“工控软件”进行一个初步的了解。二、工业“自动化”控制系统的组成在工业生产过程中,最重要的是安全,其次是稳定。工业生产环境中可以常见大如“吊车”般的设备、有毒气体、强碱、强酸、几千度的高温、易燃易爆气体、高压水蒸气。所以容不得半点错误,出错就意味着要死人,因

    2022年5月31日
    82
  • Android Studio如何实现音乐播放器(简单易上手)

    Android Studio如何实现音乐播放器(简单易上手)我们大家平时长时间打代码的时候肯定会感到疲惫和乏味,这个时候一边播放自己喜欢的音乐,一边继续打代码,心情自然也愉快很多。音乐带给人的听觉享受是无可比拟的,动听的音乐可以愉悦人的身心,让人更加积极地去热爱生活。大家平常应该会用QQ音乐、网易云音乐或者酷狗音乐等音乐APP来听歌,想不想拥有属于自己的音乐播放器。那么接下来就教大家如何用AndroidStudio自己制作一个音乐播放器APP。

    2022年6月6日
    37
  • 【JavaScript】想在JS中使用换行符,我该怎么操作呢?

    【JavaScript】想在JS中使用换行符,我该怎么操作呢?使用’\n’换行,而不是’\n’注意前后空格实战demo:$(‘#text’).val(‘hello’+’\n’+’world’);

    2022年5月10日
    36

发表回复

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

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