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