介绍

几乎每个程序都需要存储一些数据集。它可能是字符串和数字、对象等。数组是一种极好的存储解决方案。但是数组有一定的局限性。例如,它们的大小是固定的,不能移除元素,不能在中间插入元素。创建集合是为了绕过这些和其他限制。所有类型的集合(并且有很多,我们将在本课后面看到)都能够动态调整自身的大小。某些集合类型可以存储有序元素,并在添加新元素时自动将它们排序。

在本课中,我们将熟悉Java 集合框架中基本集合的类层次结构。还有各种替代库可以扩展标准Java Collections Framework的功能。其中最受欢迎的是Guava(Google 收藏库)。

*并非所有接口和类都在图中表示。为了便于理解,省略了一些。

基本接口

该图显示有两个基本接口被实现以形成其余的类和接口。

让我们来看看这些接口:

  1. 集合— 包含一组元素(对象)的普通集合。该集合具有处理元素的基本方法:插入( add addAll)、移除( remove removeAll clear)、搜索( contains containsAll)、检查集合是否为空( isEmpty)和获取大小(size

  2. Map——一个结构化为键值对的集合。此外, Map中的每个键都是唯一的:没有两个键具有相同的值。这个集合有时被称为字典地图是一个单独的界面。它不实现Collection接口,而是Java Collections Framework的一部分。

处理Map中元素的有用方法:

  • 插入(putAll

  • 得到(得到keySetentrySet

  • 删除(删除清除

  • 搜索(包含键包含值

  • 检查集合是否为空(isEmpty

  • 获取大小(大小

现在让我们详细谈谈它们中的每一个。

收藏界面

Collection接口扩展了Iterable接口,它只有一个方法:iterator ()。对我们来说,这意味着任何继承Iterable的集合都将能够返回一个迭代器。

迭代是一种特殊对象,可用于访问任何集合的元素,而不管其具体实现如何。

图中显示有3个接口继承了Collection接口:ListQueueSet。现在我们将简要地看一下它们中的每一个。

List是一个允许重复值的有序集合。List的一个特点是它的元素被编号并且可以通过数字(索引)访问。

队列按照元素添加到队列的顺序存储元素。

与列表不同,Set表示不允许重复元素的无序集合。Set接口对应于数学集合的概念。

Map接口的实现

我们可以看到Map接口表示唯一键和值之间的映射。


interface Map<K, V>

其中K是键的类型,V是存储值的类型。

使用键,我们可以从Map中提取数据。要向Map添加元素,我们必须指定一个键和一个值。

让我们看一下Map的一些实现:

  1. HashMap是Map的一种实现,它基于哈希表。它可以存储任何类型的键和值,包括null。不保证元素的顺序。

  2. LinkedHashMap是一种将数据存储为元素链表的数据结构。元素按添加顺序出现在列表中。

  3. TreeMap实现了SortedMap接口(通过NavigableMap接口)。此结构中的元素按排序顺序存储(添加新元素时,集合会自动排序)。TreeMap非常适合存储大量排序数据并具有快速检索功能。

过时的集合:

Java 有以前版本的过时集合(为了保持向后兼容性)。这些旧集合不应在新代码中使用:

  • 枚举——类似于迭代器接口;

  • Vector — 有序的元素列表,类似于ArrayList类;

  • 堆栈— 堆栈数据结构的一种实现,它存储和操作元素,就像您与一堆书进行交互一样。有一些方法可以将元素添加到堆栈 ( push ) 和将它们移除 ( pop );

  • Dictionary——类似于Map接口,但它是一个抽象类;

  • Hashtable — 类似于HashMap

您可以在本文中阅读有关集合框架的更多信息。