Java入门教程||Java 数据结构||Java 集合框架

Java 数据结构

Java 数据结构

Java工具包提供了强大的数据结构。在Java中的数据结构主要包括以下几种接口和类:

  • 枚举(Enumeration)
  • 位集合(BitSet)
  • 向量(Vector)
  • 栈(Stack)
  • 字典(Dictionary)
  • 哈希表(Hashtable)
  • 属性(Properties)

以上这些类是传统遗留的,在Java2中引入了一种新的框架-集合框架(Collection),我们后面再讨论。


枚举(Enumeration)

枚举(Enumeration)接口虽然它本身不属于数据结构,但它在其他数据结构的范畴里应用很广。 枚举(The Enumeration)接口定义了一种从数据结构中取回连续元素的方式。 

例如,枚举定义了一个叫nextElement 的方法,该方法用来得到一个包含多元素的数据结构的下一个元素。 

关于枚举接口的更多信息,请参见枚举(Enumeration)


位集合(BitSet)

位集合类实现了一组可以单独设置和清除的位或标志。

该类在处理一组布尔值的时候非常有用,你只需要给每个值赋值一"位",然后对位进行适当的设置或清除,就可以对布尔值进行操作了。

关于该类的更多信息,请参见位集合(BitSet)


向量(Vector)

向量(Vector)类和传统数组非常相似,但是Vector的大小能根据需要动态的变化。

和数组一样,Vector对象的元素也能通过索引访问。

使用Vector类最主要的好处就是在创建对象的时候不必给对象指定大小,它的大小会根据需要动态的变化。

关于该类的更多信息,请参见向量(Vector)


栈(Stack)

栈(Stack)实现了一个后进先出(LIFO)的数据结构。

你可以把栈理解为对象的垂直分布的栈,当你添加一个新元素时,就将新元素放在其他元素的顶部。

当你从栈中取元素的时候,就从栈顶取一个元素。换句话说,最后进栈的元素最先被取出。

关于该类的更多信息,请参见栈(Stack)


字典(Dictionary)

字典(Dictionary) 类是一个抽象类,它定义了键映射到值的数据结构。

当你想要通过特定的键而不是整数索引来访问数据的时候,这时候应该使用Dictionary。

由于Dictionary类是抽象类,所以它只提供了键映射到值的数据结构,而没有提供特定的实现。

关于该类的更多信息,请参见字典( Dictionary)


哈希表(Hashtable)

Hashtable类提供了一种在用户定义键结构的基础上来组织数据的手段。

例如,在地址列表的哈希表中,你可以根据邮政编码作为键来存储和排序数据,而不是通过人的名字。

哈希表键的具体含义完全取决于哈希表的使用情景和它包含的数据。

关于该类的更多信息,请参见哈希表(HashTable)


属性(Properties)

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

Properties 类被许多Java类使用。例如,在获取环境变量时它就作为System.getProperties()方法的返回值。

关于该类的更多信息,请参见属性(Properties)

Java 集合框架

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

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

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

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

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

简化图:

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

  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。

集合框架图如图所示:

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


集合接口

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

序号 接口描述
1 Collection 接口 
允许你使用一组对象,是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 接口的标准集合类。其中一些是具体类,这些类可以直接拿来使用,而另外一些是抽象类,提供了接口的部分实现。

标准集合类汇总于下表:

序号 类描述
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 接口提供的所有方法。

猜你喜欢

转载自blog.csdn.net/m0_69824302/article/details/130915987