Java 集合框架

2021年1月9日   |   by mebius

Java 集合框架

早在 Java 2 中之前,Java 就提供了特设类。比如:Dictionary, Vector, Stack, 和 Properties 这些类用来存储和操作对象组。

虽然这些类都非常有用,但是它们缺少一个核心的,统一的主题。由于这个原因,使用 Vector 类的方式和使用 Properties 类的方式有着很大不同。

集合框架被设计成要满足以下几个目标。

  • 该框架必须是高性能的。基本集合(动态数组,链表,树,哈希表)的实现也必须是高效的。
  • 该框架允许不同类型的集合,以类似的方式工作,具有高度的互操作性。
  • 对一个集合的扩展和适应必须是简单的。

为此,整个集合框架就围绕一组标准接口而设计。你可以直接使用这些接口的标准实现,诸如: LinkedList, HashSet, 和 TreeSet 等,除此之外你也可以通过这些接口实现自己的集合。

%title插图%num

简化图:

%title插图%num

说明:对于以上的框架图有如下几点说明

  1. 所有集合类都位于 java.util 包下。Java的集合类主要由两个接口派生而出:Collection 和 Map,Collection 和 Map 是 Java 集合框架的根接口,这两个接口又包含了一些子接口或实现类。
  2. 集合接口:6个接口(短虚线表示),表示不同集合类型,是集合框架的基础。
  3. 抽象类:5个抽象类(长虚线表示),对集合接口的部分实现。可扩展为自定义集合类。
  4. 实现类:8个实现类(实线表示),对接口的具体实现。
  5. Collection 接口是一组允许重复的对象。
  6. Set 接口继承 Collection,集合元素不重复。
  7. List 接口继承 Collection,允许重复,维护元素插入顺序。
  8. Map接口是键-值对象,与Collection接口没有什么关系。
  9. Set、List 和 Map 可以看做集合的三大类:
    List 集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问。
    Set 集合是无序集合,集合中的元素不可以重复,访问集合中的元素只能根据元素本身来访问(也是集合里元素不允许重复的原因)。
    Map 集合中保存 Key-value 对形式的元素,访问时只能根据每项元素的 key 来访问其 value。

集合框架图如图所示:

%title插图%num

Java 集合框架提供了一套性能优良,使用方便的接口和类,java 集合框架位于 java.util 包中, 所以当使用集合框架的时候需tgcode要进行导包。


集合接口

集合框架定义了一些接口。本节提供了每个接口的概述:

序号 接口描述
1 Collecttgcodeion 接口

允许你使用一组对象,是Collection层次结构的根接口。
2 List 接口

继承于Collection和一个 List实例存储一个有序集合的元素。
3 Set

继承于Collection,是一个不包含重复元素的集合。
4 SortedSet

继承于Set保存有序的集合。
5 Map

将唯一的键映射到值。
6 Map.Entry

描述在一个Map中的一个元素(键/值对)。是一个Map的内部类。
7 SortedMap

继承于Map,使Key保持在升序排列。
8 Enumeration

这是一个传统的接口和定义的方法,通过它可以枚举(一次获得一个)对象集合中的元素。这个传统接口已被迭代器取代。

集合类

Java 提供了一套实现了 Collection 接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的部分实现。

标准集合类汇总于下表:

tgcode

序号 类描述
1 AbstractCollection

实现了大部分的集合接口。

2 AbstractList

继承于 AbstractCollection 并且实现了大部分List接口。

3 AbstractSequentialList

继承于 AbstractList ,提供了对数据元素的链式访问而不是随机访问。

4 LinkedList

继承于AbstractSequentialList,实现了一个链表。
5 ArrayList

通过继承 AbstractList,实现动态数组。
6 AbstractSet

继承于 AbstractCollection 并且实现了大部分Set接口。

7 HashSet

继承了 AbstractSet,并且使用一个哈希表。
8 LinkedHashSet

具有可预知迭代顺序的Set接口的哈希表和链接列表实现。
9 TreeSet

继承于AbstractSet,使用元素的自然顺序对元素进行排序.
10 AbstractMap

实现了大部分的 Map 接口。

11 HashMap

继承了 HashMap,并且使用一个哈希表。
12 TreeMap

继承了 AbstractMap,并且使用一颗树。
13 WeakHashMap

继承 AbstractMap类,使用弱密钥的哈希表。
14 LinkedHashMap

继承于 HashMap,使用元素的自然顺序对元素进行排序.
15 IdentityHashMap

继承 AbstractMap 类,比较文档时使用引用相等。

在前面的教程中已经讨论通过 java.util 包中定义的类,如下所示:

序号 类描述
1 Vector

Vector 类实现了一个动态数组。和 ArrayList 和相似,但是两者是不同的。
2 Stack

栈是 Vector 的一个子类,它实现了一个标准的后进先出的栈。
3 Dictionary

Dictionary 类是一个抽象类,用来存储键/值对,作用和 Map 类相似。
4 Hashtable

Hashtable 是原始的 java.util 的一部分,是一个 Dictionary 具体的实现。
5 Properties

Properties 继承于 Hashtable.表示一个持久的属性集.属性列表中每个键及其对应值都是一个字符串。
6 BitSet

一个 Bitset 类创建一种特殊类型的数组来保存位值。BitSet 中数组大小会随需要增加。

一个 Bitset 类创建一种特殊类型的数组来保存位值。BitSet 中数组大小会随需要增加。


集合算法

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

在尝试比较不兼容的类型时,一些方法能够抛出 ​ClassCastException​异常。当试图修改一个不可修改的集合时,抛出​UnsupportedOperationException​异常。

集合定义三个静态的变量:EMPTY_SET EMPTY_LIST,EMPTY_MAP 的。这些变量都不可改变。

序号 算法描述
1 Collection Algorithms

这里是一个列表中的所有算法实现。

如何使用迭代器

通常情况下,你会希望遍历一个集合中的元素。例如,显示集合中的每个元素。

做到这一点最简单的方法是采用一个迭代器,它是一个对象,实现了 Iterator 接口或 ListIterator 接口。

迭代器,使你能够通过循环来得到或删除集合的元素。ListIterator 继承了 Iterator,以允许双向遍历列表和修改元素。

这里通过实例列出 Iterator 和 listIterator 接口提供的所有方法。

文章来源于互联网:Java 集合框架

相关推荐: Java 日期时间

Java 日期时间 java.util包提供了Date类来封装当前的日期和时间。 Date类提供两个构造函数来实例化Date对象。 第一个构造函数使用当前日期和时间来初始化对象。 Date( ) 第二个构造函数接收一个参数,该参数是从1970年1月1日起的微秒…

Tags: , ,