Java - 集合框架


在 Java 2 之前,Java 提供了临时类(例如Dictionary、Vector、StackProperties)来存储和操作对象组。尽管这些课程非常有用,但它们缺乏一个中心的、统一的主题。因此,使用 Vector 的方式与使用 Properties 的方式不同。

集合框架旨在满足多个目标,例如 -

  • 该框架必须是高性能的。基本集合(动态数组、链表、树和哈希表)的实现必须非常高效。

  • 该框架必须允许不同类型的集合以类似的方式工作并具有高度的互操作性。

  • 该框架必须轻松扩展和/或调整集合。

为此,整个集合框架是围绕一组标准接口设计的。提供了这些接口的几个标准实现,例如LinkedList、HashSetTreeSet,您可以按原样使用,如果您选择,您也可以实现自己的集合。

集合框架是用于表示和操作集合的统一架构。所有集合框架包含以下内容 -

  • 接口- 这些是代表集合的抽象数据类型。接口允许独立于其表示的细节来操作集合。在面向对象语言中,接口通常形成层次结构。

  • 实现,即类- 这些是集合接口的具体实现。本质上,它们是可重用的数据结构。

  • 算法- 这些是对实现集合接口的对象执行有用计算的方法,例如搜索和排序。这些算法被认为是多态的:也就是说,相同的方法可以用于适当集合接口的许多不同实现。

除了集合之外,该框架还定义了几个映射接口和类。映射存储键/值对。虽然地图不是正确使用术语的集合,但它们与集合完全集成。

集合接口

集合框架定义了几个接口。本节提供每个接口的概述 -

先生。 接口及说明
1 集合接口

这使您能够处理对象组;它位于集合层次结构的顶部。

2 列表界面

它扩展了Collection,并且 List 的实例存储元素的有序集合。

3 套装

这扩展了 Collection 来处理集合,它必须包含唯一的元素。

4 排序集

这扩展了 Set 来处理排序集。

5 地图

这会将唯一键映射到值。

6 地图入口

这描述了映射中的元素(键/值对)。这是Map的内部类。

7 排序映射

这扩展了 Map,以便键按升序维护。

8 枚举

这是遗留接口,定义了可以枚举(一次获取一个)对象集合中的元素的方法。这个遗留接口已被 Iterator 取代。

集合类

Java 提供了一组实现 Collection 接口的标准集合类。一些类提供了可以按原样使用的完整实现,而其他类是抽象类,提供了用作创建具体集合的起点的骨架实现。

下表总结了标准集合类 -

先生。 类别和描述
1

摘要集合

实现了大部分 Collection 接口。

2

摘要列表

扩展 AbstractCollection 并实现大部分 List 接口。

3

抽象顺序表

扩展 AbstractList 供使用顺序而不是随机访问其元素的集合使用。

4

抽象集

扩展 AbstractCollection 并实现大部分 Set 接口。

5

抽象地图

实现了大部分 Map 接口。

AbstractCollection 、AbstractSet、AbstractList、AbstractSequentialListAbstractMap类提供核心集合接口的骨架实现,以最大限度地减少实现它们所需的工作量。

上一章已经讨论了 java.util 定义的以下遗留类 -

先生。 类别和描述
1 队列

java.util包中提供了队列接口,它实现了Collection接口。队列实现了 FIFO,即先进先出。这意味着首先输入的元素将首先被删除。

收集算法

集合框架定义了几种可应用于集合和映射的算法。这些算法在 Collections 类中定义为静态方法。

其中一些方法可能会抛出ClassCastException(在尝试比较不兼容类型时发生)或 UnsupportedOperationException 在尝试修改不可修改的集合时发生)。

集合定义了三个静态变量:EMPTY_SET、EMPTY_LIST 和 EMPTY_MAP。一切都是一成不变的。

先生。 算法及描述
1 收集算法

这是所有算法实现的列表。

如何使用迭代器?

通常,您会希望循环访问集合中的元素。例如,您可能想要显示每个元素。

最简单的方法是使用迭代器,它是一个实现 Iterator 或 ListIterator 接口的对象。

迭代器使您能够循环访问集合、获取或删除元素。ListIterator 扩展了 Iterator 以允许双向遍历列表和修改元素。

先生。 迭代器方法及说明
1 使用 Java 迭代器

以下是 Iterator 和 ListIterator 接口提供的所有方法的列表以及示例。

如何使用比较器?

TreeSet 和 TreeMap 都按排序顺序存储元素。然而,比较器准确地定义了排序顺序的含义。

该接口允许我们以多种不同的方式对给定的集合进行排序。此外,该接口还可用于对任何类的任何实例进行排序(甚至是我们无法修改的类)。

先生。 迭代器方法及说明
1 使用 Java 比较器

以下是比较器接口提供的所有方法和示例的列表。

如何使用可比对象?

TreeSet 和 TreeMap 都按排序顺序存储元素。我们可以使用 Comparable 接口来精确定义排序顺序的含义。

该接口允许我们以多种不同的方式对给定的集合进行排序。此外,该接口还可用于对任何类的任何实例进行排序(甚至是我们无法修改的类)。

先生。 迭代器方法及说明
1 使用Java比较

以下是 Comparable Interface 提供的所有方法的列表以及示例。

概括

Java 集合框架使程序员能够访问预先打包的数据结构以及操作它们的算法。

集合是一个可以保存对其他对象的引用的对象。集合接口声明可以对每种类型的集合执行的操作。

集合框架的类和接口位于包 java.util 中。