java集合


集合
当我们需要存储多个对象时,就会用到集合。比如,一个用户列表页,我们就需要把多个用户信息返回给页面。比如集合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
*昵称:
*邮箱:
个人站点:
*想说的话: