介绍
几乎每个程序都需要存储一些数据集。它可能是字符串和数字、对象等。数组是一种极好的存储解决方案。但是数组有一定的局限性。例如,它们的大小是固定的,不能移除元素,不能在中间插入元素。创建集合是为了绕过这些和其他限制。所有类型的集合(并且有很多,我们将在本课后面看到)都能够动态调整自身的大小。某些集合类型可以存储有序元素,并在添加新元素时自动将它们排序。
在本课中,我们将熟悉Java 集合框架中基本集合的类层次结构。还有各种替代库可以扩展标准Java Collections Framework的功能。其中最受欢迎的是Guava(Google 收藏库)。
基本接口
该图显示有两个基本接口被实现以形成其余的类和接口。
让我们来看看这些接口:
-
集合— 包含一组元素(对象)的普通集合。该集合具有处理元素的基本方法:插入( add、 addAll)、移除( remove、 removeAll、 clear)、搜索( contains、 containsAll)、检查集合是否为空( isEmpty)和获取大小(size)。
-
Map——一个结构化为键值对的集合。此外, Map中的每个键都是唯一的:没有两个键具有相同的值。这个集合有时被称为字典。地图是一个单独的界面。它不实现Collection接口,而是Java Collections Framework的一部分。
处理Map中元素的有用方法:
-
插入(放,putAll)
-
得到(得到,keySet,值,entrySet)
-
删除(删除,清除)
-
搜索(包含键,包含值)
-
检查集合是否为空(isEmpty)
-
获取大小(大小)
现在让我们详细谈谈它们中的每一个。
收藏界面
Collection接口扩展了Iterable接口,它只有一个方法:iterator ()。对我们来说,这意味着任何继承Iterable的集合都将能够返回一个迭代器。
迭代器是一种特殊对象,可用于访问任何集合的元素,而不管其具体实现如何。
图中显示有3个接口继承了Collection接口:List、Queue和Set。现在我们将简要地看一下它们中的每一个。
List是一个允许重复值的有序集合。List的一个特点是它的元素被编号并且可以通过数字(索引)访问。
队列按照元素添加到队列的顺序存储元素。
与列表不同,Set表示不允许重复元素的无序集合。Set接口对应于数学集合的概念。
Map接口的实现
我们可以看到Map接口表示唯一键和值之间的映射。
interface Map<K, V>
其中K是键的类型,V是存储值的类型。
使用键,我们可以从Map中提取数据。要向Map添加元素,我们必须指定一个键和一个值。
让我们看一下Map的一些实现:
-
HashMap是Map的一种实现,它基于哈希表。它可以存储任何类型的键和值,包括null。不保证元素的顺序。
-
LinkedHashMap是一种将数据存储为元素链表的数据结构。元素按添加顺序出现在列表中。
-
TreeMap实现了SortedMap接口(通过NavigableMap接口)。此结构中的元素按排序顺序存储(添加新元素时,集合会自动排序)。TreeMap非常适合存储大量排序数据并具有快速检索功能。
过时的集合:
Java 有以前版本的过时集合(为了保持向后兼容性)。这些旧集合不应在新代码中使用:
-
枚举——类似于迭代器接口;
-
Vector — 有序的元素列表,类似于ArrayList类;
-
堆栈— 堆栈数据结构的一种实现,它存储和操作元素,就像您与一堆书进行交互一样。有一些方法可以将元素添加到堆栈 ( push ) 和将它们移除 ( pop );
-
Dictionary——类似于Map接口,但它是一个抽象类;
-
Hashtable — 类似于HashMap。
您可以在本文中阅读有关集合框架的更多信息。
GO TO FULL VERSION