
java基础--09(详解List集合)(转载)
ArrayList在扩容时会自动增加数组的长度,而不需要显式调整。 ArrayList没有固定大小,可以从0到任何大于当前数据数量的数进行扩展。 如果已知需要存储的大致数据量,可以在添加数据之前调用
发布日期:2021-05-20 07:59:08
浏览次数:15
分类:精选文章
本文共 2023 字,大约阅读时间需要 6 分钟。
List集合的三个子类分析
List集合是Java集合框架中的核心接口之一,它提供了灵活的数据存储方式。Below我们将分析List集合的三个主要子类:ArrayList、LinkedList和Vector,并探讨它们的特点和适用场景。
ArrayList
ArrayList是List集合中最常用的实现类,它基于动态数组来存储数据。以下是ArrayList的几个关键特点:
- 性能优越:相比Vector,ArrayList在性能上具有显著优势。这是因为它不需要像Vector那样在每次操作前进行同步。
- 默认初始化容量:ArrayList的默认容量是50,这一点可以通过调用它的构造方法进行调整。
- 扩容机制:ArrayList采用动态扩容,当需要添加元素时,如果当前数组存储的元素数量已达到其容量限制时,系统会自动增加数组的尺寸。为了应对频繁的增删操作,ArrayList采用了系统库中的
arraycopy
方法来优化扩容过程。 - 不支持固定大小:ArrayList的大小可以随时增加,但无法直接缩减。需要通过
trimToSize()
方法来减少其存储空间。
优点:
- 性能优越,适合大部分普通使用场景。
- 方便查询和修改操作,支持快速随机访问。
缺点:
- 线程不安全,可能导致数据一致性问题。
- 操作过程中需要频繁调用
arraycopy
,这可能对性能产生一定影响。
LinkedList
LinkedList是一种以双向链表形式实现的List集合,其主要特点包括:
- 支持双向遍历:LinkedList的优势在于支持双向遍历,方法如
iterator()
返回的遍历器可以从头到尾和尾到头都能顺利进行。 - 内存使用效率高:相比ArrayList,LinkedList在内存使用上更加高效,因为它不需要额外 的空间来存储对象的间隙。
- 特定操作优化:如果你需要频繁执行逆序操作或需要快速访问前一个/后一个元素,LinkedList是一个理想选择。
优点:
- 支持双向遍历,适合需要往返操作的场景。
- 内存占用低,适合内存资源有限的应用场景。
缺点:
- 操作速度较慢,尤其是当数据量较大时。
- 不支持随机访问,[::-1]操作效率较低。
Vector
Vector类似于ArrayList,但它具有线程安全特性和固定大小的特性。以下是Vector的关键特点:
- 线程安全:Vector是线程安全的,因为它每次操作都对其内部数据进行同步,避免了 ConcurrentModificationExceptionexception异常。
- 固定大小初始容量:不像ArrayList那样可以随机初始化容量,Vector在创建时需要指定初始大小。
- 扩容机制:与ArrayList不同,Vector的扩容采用合成(copying)的方式,将旧数组扩大为一倍大小,然后将旧数组中的数据复制到新数组中。
优点:
- 线程安全,避免了多线程环境下数据不一致的问题。
- 对于需要严格控制大小的场景,Vector提供了固定尺寸的选项。
缺点:
- 性能较差,扩容时需要复制整个数组,导致执行时间较长。
- 内存占用较高,尤其是在不需要扩容的情况下,Vector的内存浪费比较明显。
List选择的最佳实践
在实际开发中,选择哪种List集合实现类取决于具体需求。以下是一些建议:
- ArrayList:适合大多数普通场景,特别是需要高性能的应用。
- LinkedList:适合需要频繁逆向操作或以双向方式访问元素的应用。
- Vector:只有在需要线程安全并且容量限制明确的情况下,Vector才是合适的选择。
ArrayList的核心API
ArrayList提供了一些有用的API方法,包括:
ensureCapacity(int)
:在添加新元素之前,确保数组至少有指定的容量,以减少不必要的扩容操作。trimToSize()
:将数组的大小调整为当前实际使用的数据量,释放多余的存储空间。Arrays.asList(...)
:将一个数组转换为List对象的静态方法,常用来便捷地创建不modifiable List。
一个高效地访问Dynamic Array元素的技巧:
由于ArrayList的数据存储与Java的数组类似,可以通过保持数组的“可访问性”(即数组元素始终在数组结构中)来实现快速的元素访问操作,但需要注意以下几点:
ensureCapacity()
以提高性能。总结
List集合在Java中扮演着关键角色,ArrayList、LinkedList和Vector分别针对不同的使用场景提供了解决方案。在选择合适的List实现类时,需要综合考虑线程安全性、数据结构特点、性能需求以及内存使用效率等多个因素。
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2025年04月23日 13时02分34秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
【换行符】什么时候用cin.get()吃掉输入流中的换行符
2019-03-09
广东外语外贸大学第三届网络安全大赛Writeup
2019-03-09
SpringBoot使用RedisTemplate简单操作Redis的五种数据类型
2019-03-10
Thymeleaf sec:authorize 标签不生效
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
Flask--简介
2019-03-11
Frame--Api框架
2019-03-11
Boostrap技能点整理之【网格系统】
2019-03-11
javaWeb服务详解(含源代码,测试通过,注释) ——Emp的Dao层
2019-03-11
Git简单理解与使用
2019-03-11
echarts 基本图表开发小结
2019-03-11
adb通过USB或wifi连接手机
2019-03-11
JDK9-15新特性
2019-03-11
TreeSet、TreeMap
2019-03-11
JVM内存模型
2019-03-11
可变长度参数
2019-03-11
3、条件查询
2019-03-11
cordova打包apk更改图标
2019-03-11
GitHub上传时,项目在已有文档时直接push出现错误解决方案
2019-03-11