Java - 集合框架
在 Java 2 之前,Java 提供了诸如 Dictionary、Vector、Stack、 之类的 ad hoc 类 和属性 存储和操作对象组。尽管这些课程非常有用,但它们缺乏一个中心统一的主题。因此,您使用 Vector 的方式与使用 Properties 的方式不同。
集合框架旨在满足多个目标,例如 -
-
该框架必须是高性能的。基本集合(动态数组、链表、树和哈希表)的实现非常高效。
-
该框架必须允许不同类型的集合以相似的方式工作并具有高度的互操作性。
-
该框架必须轻松扩展和/或调整集合。
为此,整个集合框架是围绕一组标准接口设计的。 LinkedList、HashSet、等几种标准实现 和 树集 ,其中提供了这些接口,您可以按原样使用,也可以实现自己的集合,如果您愿意的话。
集合框架是用于表示和操作集合的统一架构。所有集合框架都包含以下内容 -
-
接口 − 这些是代表集合的抽象数据类型。接口允许独立于其表示的细节来操作集合。在面向对象的语言中,接口通常形成层次结构。
-
实现,即类 − 这些是集合接口的具体实现。本质上,它们是可重用的数据结构。
-
算法 − 这些是对实现集合接口的对象执行有用计算的方法,例如搜索和排序。这些算法被称为是多态的:也就是说,相同的方法可以用于适当集合接口的许多不同实现。
除了集合之外,该框架还定义了几个地图接口和类。地图存储键/值对。虽然地图不是集合 在正确使用该术语时,它们与集合完全集成。
集合接口
集合框架定义了几个接口。本节提供每个接口的概述 -
Sr.No. | 界面和说明 |
---|---|
1 | 集合接口 这使您能够处理对象组;它位于集合层次结构的顶部。 |
2 | 列表接口 这扩展了 Collection List 的一个实例存储了一个有序的元素集合。 |
3 | 套装 这将 Collection 扩展为处理集合,这些集合必须包含唯一元素。 |
4 | 排序集 这扩展了 Set 以处理已排序的集合。 |
5 | 地图 这会将唯一键映射到值。 |
6 | 地图.Entry 这描述了映射中的元素(键/值对)。这是 Map 的内部类。 |
7 | SortedMap 这扩展了 Map 以便以升序维护键。 |
8 | 枚举 这是遗留接口定义的方法,您可以通过这些方法枚举(一次获取一个)对象集合中的元素。这个遗留接口已被迭代器取代。 |
集合类
Java 提供了一组实现 Collection 接口的标准集合类。其中一些类提供了可以按原样使用的完整实现,而另一些则是抽象类,提供了用作创建具体集合的起点的骨架实现。
下表总结了标准集合类 -
Sr.No. | 类和描述 |
---|---|
1 | 抽象集合 实现了大部分的 Collection 接口。 |
2 | 抽象列表 扩展 AbstractCollection 并实现了大部分 List 接口。 |
3 | 抽象序列表 扩展 AbstractList 以供使用顺序而不是随机访问其元素的集合使用。 |
4 | 链表 通过扩展 AbstractSequentialList 实现链表。 |
5 | 数组列表 通过扩展 AbstractList 实现动态数组。 |
6 | 抽象集 扩展 AbstractCollection 并实现了大部分 Set 接口。 |
7 | 哈希集 扩展 AbstractSet 以与哈希表一起使用。 |
8 | LinkedHashSet 扩展 HashSet 以允许插入顺序迭代。 |
9 | 树集 实现存储在树中的集合。扩展 AbstractSet。 |
10 | 抽象地图 实现了大部分 Map 接口。 |
11 | HashMap 扩展 AbstractMap 以使用哈希表。 |
12 | 树图 扩展 AbstractMap 以使用树。 |
13 | 弱哈希映射 扩展 AbstractMap 以使用带有弱键的哈希表。 |
14 | LinkedHashMap 扩展 HashMap 以允许插入顺序迭代。 |
15 | IdentityHashMap 扩展 AbstractMap 并在比较文档时使用引用相等。 |
AbstractCollection、AbstractSet、AbstractList、AbstractSequentialList 和抽象地图 类提供核心集合接口的骨架实现,以尽量减少实现它们所需的工作量。
java.util 定义的以下遗留类在前一章中已经讨论过 -
Sr.No. | 类和描述 |
---|---|
1 | 矢量 这实现了一个动态数组。类似于ArrayList,但有一些不同。 |
2 | 堆栈 Stack 是 Vector 的子类,实现了标准的后进先出堆栈。 |
3 | 字典 Dictionary 是一个抽象类,代表一个 key/value 存储库,操作起来很像 Map。 |
4 | 哈希表 Hashtable 是原始 java.util 的一部分,是 Dictionary 的具体实现。 |
5 | 属性 属性是 Hashtable 的子类。它用于维护键为字符串且值也是字符串的值列表。 |
6 | 位集 BitSet 类创建一种特殊类型的数组来保存位值。这个数组可以根据需要增加大小。 |
收集算法
集合框架定义了几种可应用于集合和地图的算法。这些算法在 Collections 类中被定义为静态方法。
有几个方法可以抛出 ClassCastException ,当尝试比较不兼容的类型或 UnsupportedOperationException 时发生 ,当尝试修改不可修改的集合时会发生这种情况。
集合定义了三个静态变量:EMPTY_SET、EMPTY_LIST 和 EMPTY_MAP。都是不可变的。
Sr.No. | 算法和描述 |
---|---|
1 | 收集算法 这是所有算法实现的列表。 |
如何使用迭代器?
通常,您会希望循环浏览集合中的元素。例如,您可能希望显示每个元素。
最简单的方法是使用迭代器,它是一个实现 Iterator 或 ListIterator 接口的对象。
迭代器使您能够循环通过集合、获取或删除元素。 ListIterator 扩展了 Iterator 以允许列表的双向遍历和元素的修改。
Sr.No. | 迭代器方法和描述 |
---|---|
1 | 使用 Java 迭代器 以下是Iterator和ListIterator接口提供的所有方法的列表。 |
如何使用比较器?
TreeSet 和 TreeMap 都以排序顺序存储元素。然而,正是比较器准确地定义了排序顺序 意思。
这个接口允许我们以任意数量的不同方式对给定的集合进行排序。此外,此接口可用于对任何类的任何实例进行排序(甚至是我们无法修改的类)。
Sr.No. | 迭代器方法和描述 |
---|---|
1 | 使用 Java 比较器 以下是 Comparator Interface 提供的所有方法和示例的列表。 |
总结
Java 集合框架使程序员可以访问预打包的数据结构以及操作它们的算法。
集合是可以保存对其他对象的引用的对象。集合接口声明了可以对每种类型的集合执行的操作。
集合框架的类和接口在java.util包中。
java