java集合

时间 2021/5/25 9:17:28 加载中...

集合

当我们需要存储多个对象时,就会用到集合。比如,一个用户列表页,我们就需要把多个用户信息返回给页面。比如集合A这种形式
集合A:用户1、用户2、用户3、用户4

还有一种键值对的集合,比如集合B这种形式
集合B:no1:用户1、no2:用户2、no3:用户3、no4:用户4

Java 集合有哪些?

以 Java JDK 1.8.0_162 为例

Java 的集合类在 rt.jar 文件里,在包 java.util.* 下面。

针对上面的集合A,Java 提供了 Collection 类型的集合
针对上面的集合B,Java 提供了 Map 类型的集合

Collection 和 Map 均是接口。

Collection 又分 List 和 Set 接口。

todo: 补充 List 类图

List 接口继承自 Collection 接口,而 List 的实现类有 ArrayList、LinkedList、Vector、CopyOnWriteArrayList

ArrayList 查快,新增/删除慢,而 LinkedList 正好相反。
而 Vector 和 ArrayList 很像,都是基于数组实现的。Vector 是线程安全的,但 ArrayList 不是。

CopyOnWriteArrayList
与 Vector一样,CopyOnWriteArrayList也可以认为是ArrayList的线程安全版,不同之处在于 CopyOnWriteArrayList在写操作时会先复制出一个副本,在新副本上执行写操作,然后再修改引用。这种机制让 CopyOnWriteArrayList可以对读操作不加锁,这就使CopyOnWriteArrayList的读效率远高于Vector。 CopyOnWriteArrayList的理念比较类似读写分离,适合读多写少的多线程场景。但要注意,CopyOnWriteArrayList只能保证数据的最终一致性,并不能保证数据的实时一致性,如果一个写操作正在进行中且并未完成,此时的读操作无法保证能读到这个写操作的结果。

Vector 和 CopyOnWriteArrayList

二者均是线程安全的、基于数组实现的List
Vector是【绝对】线程安全的,CopyOnWriteArrayList只能保证读线程会读到【已完成】的写结果,但无法像Vector一样实现读操作的【等待写操作完成后再读最新值】的能力
CopyOnWriteArrayList读性能远高于Vector,并发线程越多优势越明显
CopyOnWriteArrayList占用更多的内存空间

适用场景

实现原理

1、ArrayList 和 LinkedList 内部剖析

Map
具体实现类有 HashMap、Hashtable、ConcurrentHashMap、TreeMap

参照

https://www.toutiao.com/a6667675765271691787/

扫码分享
版权说明
作者:SQBER
文章来源:http://www.sqber.com/articles/java-collection.html
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。