- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
JAVA集合框架中的常用集合及其特点、适用场景、实现原理简介
ArrayList基于数组来实现集合的功能,其内部维护了一个可变长的对象数组,集合内全部对象存储于这个数组中,并实现该数组长度的动态伸缩
ArrayList使用数组拷贝来实现指定位置的插入和删除:
插入:
图片.png
删除:
图片.png
LinkedList
LinkedList基于链表来实现集合的功能,其实现了静态类Node,集合中的每个对象都由一个Node保存,每个Node都拥有到本人的前一个和后一个Node的引用
LinkedList追加元素的过程示例:
图片.png
ArrayList vs LinkedList
ArrayList的随机访问更高,基于数组实现的ArrayList可直接定位到目标对象,而LinkedList需要从头Node或尾Node开头向后/向前遍历若干次才能定位到目标对象
LinkedList在头/尾节点执行插入/删除操作的效率比ArrayList要高
由于ArrayList每次扩容的容量是当前的1.5倍,所以LinkedList所占的内存空间要更小一些
二者的遍历效率接近,但需要留意,遍历LinkedList时应用iterator方式,不要用get(int)方式,否则效率会很低
Vector
Vector和ArrayList很像,都是基于数组实现的集合,它和ArrayList的次要区分在于
Vector是线程平安的,而ArrayList不是
由于Vector中的方法基本都是synchronized的,其功能低于ArrayList
Vector可以定义数组长度扩容的因子,ArrayList不能
CopyOnWriteArrayList
与 Vector一样,CopyOnWriteArrayList也可以认为是ArrayList的线程平安版,不同之处在于 CopyOnWriteArrayList在写操作时会先复制出一个副本,在新副本上执行写操作,然后再修改引用。这种机制让 CopyOnWriteArrayList可以对读操作不加锁,这就使CopyOnWriteArrayList的读效率远高于Vector。 CopyOnWriteArrayList的理念比较类似读写分别,适合读多写少的多线程场景。但要留意,CopyOnWriteArrayList只能保证数据的最终全都性,并不能保证数据的实时全都性,假如一个写操作正在进行中且并未完成,此时的读操作无法保证能读到这个写操作的结果。
Vector vs CopyOnWriteArrayList
二者均是线程平安的、基于数组实现的List
Vector是【确定】线程平安的,CopyOnWriteArrayList只能保证读线程会读到【已完成】的写结果,但无法像Vector一样实现读操作的【等待写操作完成后再读最新值】的力量
CopyOnWriteArrayList读功能远高于Vector,并发线程越多优势越明显
CopyOnWriteArrayList占用更多的内存空间
Map类集合
图片.png
Map将key和value封装至一个叫做Entry的对象中,Map中存储的元素实际是Entry。只要在keySet()和values()方法被调用时,Map才会将keySet和values对象实例化。
每一个Map依据其本身特点,都有不同的Entry实现,以对应Map的内部类方式消灭。
前文已经对Map接口的基本特点进行过描述,我们直接来看一下Map接口的常用实现类
HashMap
HashMap将Entry对象存储在一个数组中,并通过哈希表来实现对Entry的快速访问:
图片.png
由每个Entry中的key的哈希值打算该Entry在数组中的位置。以这种特功能够实现通过key快速查找到Entry,从而获得该key对应的value。在不发生哈希冲突的前提下,查找的时间简单度是O(1)。
假如两个不同的key计算出的index是一样的,就会发生两个不同的key都对应到数组中同一个位置的情况,也就是所谓的哈希冲突。HashMap处理哈 希冲突的方法是拉链法,也就是说数组中每个位置保存的实际是一个Entry链表,链表中每个Entry都拥有指向链表中后一个Entry的引用。在发生哈希冲突时,将冲突的Entry追加至链表的头部。当HashMap在寻址时发觉某个key对应的数组index上有多个Entry,便会遍历该位置上的 Entry链表,直到找到目标的Entry。
图片.png
HashMap的Entry类:
static class EntryK,V implements Map.EntryK,V { ? ? ? ?final K key;
? ? ? ?V value;
? ? ? ?Entry n
您可能关注的文档
- Flink资源管理机制.docx
- Flink 是如何统一批流引擎的?.docx
- Git 常用技能总结.docx
- Flink面试手册 核心概念和基础篇.docx
- GitHub 开源项目介绍:一种新的受控随机算法.docx
- GitHub 关系型数据库垂直分库实践.docx
- GitHub的MySQL高可用性实践.docx
- Git多人协作开发.docx
- Google Guava 缓存实现接口的限流.docx
- Google工程师是怎么处理大规模数据的?.docx
- Unit7Happy Birthday!单元语法精炼与写作专练(含答案)人教版(2024)英语七年级上册.docx
- 福建省泉州第一中学2025-2026学年九年级上学期第一次月考语文试题.docx
- 第8课《〈世说新语〉二则》同步练习(含答案) 2025-2026学年统编版语文七年级上册.docx
- 高速事故应急练习题库及答案.docx
- 牛津译林版九年级上册Unit 1 Know yourself知识过关第1讲--词汇(含答案).docx
- 牛津译林版九年级上册Unit 1 Know yourself知识过关第2讲--短语句型(含答案).docx
- 教版(2024)七年级下册Unit1单词巩固(一) 七上第一部分单词复习课件.pptx
- 人教版(2024)七年级下册Unit1单词巩固(二) 七上第二部分单词复习课件.pptx
- 译林版(2024)八年级上册Unit 1 Friendship周末练习作业(含答案).docx
- 化工防腐安全练习题库及答案.docx
文档评论(0)