Java中的容器在开发过程必然会接触到的,也是作为一名合格的Java程序员必须要掌握的内容。各种面试、笔试中十有八九都会在容器上面做“文章”。由于每一类容器涉及的知识点都比较多,基于单一职责原则,本文并不会对特定容器做特别深入地介绍。文章在宏观层面上来研究一下Java中的容器体系,并比较各种容器之前的联系与区别,主要内容如下:
- Java容器的体系结构
- Collection体系
- Map体系
容器的体系结构
Java中的容器主要有Collection和Map,它们都是顶层接口,都位于java.util
包下,实际使用地容器都是基于这两个接口延伸出来的。下面来看看在实际开发过程中使用的主要类的类图(基于JDK1.8),并简单地介绍它们的功能。
下面是Collection
接口的类图:
List
:是一种已知顺序的有序数据集,可容纳重复的元素。Set
:是一种数学意义上的集合,最大的特点是不可容纳重复元素。Queue
:即队列,与经典数据结构的队列一致。
下面是Map
接口的类图:
HashMap
:即哈希表,与经典数据结构中哈希表一致,主要用于快速查找。HashTable
:与HashMap
功能基本一致,不过是线程安全的。SortedMap
:经过排序的Map。ConcurrentMap
:并发Map,主要用于多线程并发环境下。
Collection
Collection
实现了Iterable
(迭代器)接口,意味着其子类都可以利用迭代器模式来访问其中的元素。所以,我们可以用for...each...
方式要顺序读取Collection
中的元素,类似下面的代码:
public static void main(String[] args) {
Collection<String> c = new ArrayList<String>();
c.add("1");
for (String s : c) {
System.out.println(s);
}
}
这种写法实际上不属于Java的原生语法,而是一种语法糖。它最终编译后的字节码主体部分为:
public static void main(java.lang.String[]);
descriptor: (