集合类学习笔记(一)

简介: Java集合类主要分为Set、List、Queue和Map四大类,常见的实现如HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap、TreeMap等。线程不安全的集合包括HashSet、ArrayList等,可使用Collections的synchronizedXxx()方法包装成线程安全。线程安全的集合有Vector、Hashtable,但性能较低。Java 5后,`java.util.concurrent`包提供了并发友好的Concurrent和CopyOnWrite系列集合,兼顾性能和线程安全。

1 .Java中有哪些容器(集合类)?

Java中的集合类主要由Collection和Map这两个接口派生而出,其中Collection接口又派生出三个子接口,分别是Set、List、Queue。所有的Java集合类,都是Set、List、Queue、Map这四个接口的实现类,这四个接口将集合分成了四大类,其中

​ Set代表无序的,元素不可重复的集合;
​ List代表有序的,元素可以重复的集合;
​ Queue代表先进先出(FIFO)的队列;
​ Map代表具有映射关系(key-value)的集合。

​ 这些接口拥有众多的实现类,其中最常用的实现类有HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap、TreeMap等。

​ 扩展阅读

​ Collection体系的继承树:

​ img

​ Map体系的继承树:

​ img

​ 注:紫色框体代表接口,其中加粗的是代表四类集合的接口。蓝色框体代表实现类,其中有阴影的是常用实现类。

  1. Java中的容器,线程安全和线程不安全的分别有哪些?

​ java.util包下的集合类大部分都是线程不安全的,例如我们常用的HashSet、TreeSet、ArrayList、LinkedList、ArrayDeque、HashMap、TreeMap,这些都是线程不安全的集合类,但是它们的优点是性能好。如果需要使用线程安全的集合类,则可以使用Collections工具类提供的synchronizedXxx()方法,将这些集合类包装成线程安全的集合类。

​ java.util包下也有线程安全的集合类,例如Vector、Hashtable。这些集合类都是比较古老的API,虽然实现了线程安全,但是性能很差。所以即便是需要使用线程安全的集合类,也建议将线程不安全的集合类包装成线程安全集合类的方式,而不是直接使用这些古老的API。

​ 从Java5开始,Java在java.util.concurrent包下提供了大量支持高效并发访问的集合类,它们既能包装良好的访问性能,有能包装线程安全。这些集合类可以分为两部分,它们的特征如下:

​ 以Concurrent开头的集合类:

​ 以Concurrent开头的集合类代表了支持并发访问的集合,它们可以支持多个线程并发写入访问,这些写入线程的所有操作都是线程安全的,但读取操作不必锁定。以Concurrent开头的集合类采用了更复杂的算法来保证永远不会锁住整个集合,因此在并发写入时有较好的性能。

​ 以CopyOnWrite开头的集合类:

​ 以CopyOnWrite开头的集合类采用复制底层数组的方式来实现写操作。当线程对此类集合执行读取操作时,线程将会直接读取集合本身,无须加锁与阻塞。当线程对此类集合执行写入操作时,集合会在底层复制一份新的数组,接下来对新的数组执行写入操作。由于对集合的写入操作都是对数组的副本执行操作,因此它是线程安全的。

​ 扩展阅读

​ java.util.concurrent包下线程安全的集合类的体系结构:

​ img

相关文章
|
5天前
|
存储 算法 Java
集合框架应用一
集合框架应用一
27 2
|
5天前
|
存储 Java 索引
Java集合框架
Java集合框架
16 0
|
5天前
|
存储 算法 安全
JAVA集合框架
JAVA集合框架
|
5天前
|
存储 供应链 Java
集合框架应用二
集合框架应用二
16 1
|
12月前
|
存储 安全 算法
2. 集合类
2. 集合类
32 0
|
12月前
|
存储 Java 索引
Java集合框架详解(一)
Java集合框架详解(一)
|
存储 Java 容器
Java集合框架的一些小知识
Java集合框架的一些小知识
|
存储 Java 索引
Java集合框架总结
Java集合框架总结
83 0
|
存储 安全 Java
Java集合框架详解2
Java集合框架详解2
82 0
|
存储 安全 Java
Java集合框架详解3
Java集合框架详解3
69 0