千家信息网

java.util.Collection源码的示例分析

发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,这篇文章主要为大家展示了"java.util.Collection源码的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"java.util.Coll
千家信息网最后更新 2025年01月18日java.util.Collection源码的示例分析

这篇文章主要为大家展示了"java.util.Collection源码的示例分析",内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下"java.util.Collection源码的示例分析"这篇文章吧。

明确一下几点:

  • Collection是接口,其继承了Iterable接口

  • Collection属于单值类型集合,重点子接口List接口和Set接口

Java.util.List接口(有序、不唯一)

ArraryList

  ArrayList 是一个数组队列,相当于 动态数组。与Java中的数组相比,它的容量能动态增长。它继承于AbstractList,实现了List, RandomAccess, Cloneable, java.io.Serializable这些接口。ArrayList是非同步的,效率高但是线程不安全,Collections.sychromiziedList(new ArraryList<>());可以让那个ArrayList变成线程安全类

  • ArrayList是基于动态数组实现的,在增删时候,需要数组的拷贝复制。

  • ArrayList的默认初始化容量是10,每次扩容时候增加原先容量的一半,也就是变为原来的1.5倍

  • 删除元素时不会减少容量,若希望减少容量则调用trimToSize()

  • 它不是线程安全的。它能存放null值。

LinkedList

  

  LinkedList是一个双向循环列表队列

  • LinkedList 是一个继承于AbstractSequentialList的双向链表。它也可以被当作堆栈、队列或双端队列进行操作。

  • LinkedList 实现 List 接口,能对它进行队列操作。

  • LinkedList 实现 Deque 接口,即能将LinkedList当作双端队列使用。

  • LinkedList 实现了Cloneable接口,即覆盖了函数clone() ,能克隆。

  • LinkedList 实现java.io.Serializable接口,这意味着LinkedList支持序列化,能通过序列化去传输。

  • LinkedList 是非同步的。

Vector

底层是数组,现在已少用,被ArrayList替代,原因有两个:

  • Vector所有方法都是同步,有性能损失。

  • Vector初始length是10 超过length时 以100%比率增长,相比于ArrayList更多消耗内存。

  • 参考资料:https://www.zhihu.com/question/31948523/answer/113357347

  总的来说:查询多用ArrayList,增删多用LinkedList。

  ArrayList增删慢不是绝对的(在数量大的情况下,会有例外):

  • 如果增加元素一直是使用add() (增加到末尾)的话,并且不扩容的情况下)

  • 一直删除末尾的元素也是ArrayList要快【不用复制移动位置】

  • 至于如果删除的是中间的位置的话,还是ArrayList要快!

  但一般来说:增删多还是用LinkedList,因为上面的情况是极端的~

Java.util.Set接口(无序、唯一)

|--SortedSet接口--TreeSet实现类

Set接口--|--HashSet实现类

|--LinkedHashSet实现类

hashSet

  hashSet底层基于hashMap实现,如图

  hashSet中的add()方法,是将对象E放入hashMap中的key的位置,value位置存放的是一个固定的Object,如图:

  

HashSet是无序唯一的,当元素为自定义对象时,两者的hashCode不同,被认为是不同的元素从而被允许放入HashSet中,但这不符合实际的生产意义,因此需要让其判定位相等,就要重写hashCode() ,然而重写HashCode() ,会出现重码的bug,因此需要重写equals()来解决

  添加元素的时候,如果key(也对应的Set集合的元素)相等,那么则修改value值。而在Set集合中,value值仅仅是一个Object对象罢了(该对象对Set本身而言是无用的)。

也就是说:Set集合如果添加的元素相同时,是根本没有插入的(仅修改了一个无用的value值),从源码(HashMap)中也看出来,==和equals()方法都有使用,具体过程如下

  • 新元素的hsah是否等于老元素的hash,如果不相等,则元素不同,如果相等,那么进行第二部比较

  • 新元素与老元素用"=="进行比较,如果相等,则为同一元素,若不同则进行第三部比较

  • 新元素和老元素用equals()方法判定是否相等,如果不等则不是同一元素,如果相等那么结果为:两个元素不是同一个对象,程序想把它们当成同一个对象,因此重写了equals方法;

TreeSet

与HashSet是基于HashMap实现一样,TreeSet同样是基于TreeMap实现的。

TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向 TreeSet中加入的应该是同一个类的对象。

LinkedHashSet

LinkedHashSet是HashSet的一个"扩展版本",HashSet并不管什么顺序,不同的是LinkedHashSet会维护"插入顺序"。HashSet内部使用HashMap对象来存储它的元素,而LinkedHashSet内部使用LinkedHashMap对象来存储和处理它的元素

以上是"java.util.Collection源码的示例分析"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

元素 接口 对象 数组 队列 排序 不同 容量 方法 源码 位置 示例 分析 安全 内容 动态 情况 时候 篇文章 线程 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 重点时段网络安全防控 机关网络安全核查情况报告 列举五个网络安全威胁名单 做软件开发十代i5处理器够用吗 交易所软件开发 物理安全技术和网络安全技术指 造价项目管理软件开发价格 浙江先进软件开发管理模式 五大服务器的配置原理 网络安全技术教育平台 网络安全问题存在的表现有哪些 csgo1.6连接不上服务器 永安市行政服务中心网络安全招标 ibm工业服务器工资 服务器2805端口不能用咋回事 教育部青少年网络安全课件 新闻资讯软件开发需求分析 网络安全大赛都有谁 深圳服务器电源使用方法 电网网络安全系统 计算机网络技术和会计 如何将数据库导入visio 上海综合网络技术收费 西安检察院网络安全 虹口区网络技术咨询信息 面向方面软件开发 软件开发新技术分享 西安网络技术工程师工资待遇 第二届强网网络安全大赛 河北省通信管理局网络安全中心
0