写点什么

Java 常见数据结构详解

作者:编程江湖
  • 2022 年 2 月 07 日
  • 本文字数:2353 字

    阅读完需:约 8 分钟

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

  • 枚举(Enumeration)

  • 位集合(BitSet)

  • 向量(Vector)

  • 栈(Stack)

  • 字典(Dictionary)

  • 哈希表(Hashtable)

  • 属性(Properties)

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


枚举(Enumeration)

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

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

传统接口方法虽然被抛弃了,但尽管在很多地方,虽然使用了它可能被遗弃的代码,但现在已经很少使用了。在此之外,还用在类,并且在应用程序中也被广泛使用。 下面总结了一些 API 的一些枚举声明的:




位集合(BitSet)

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

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

一个 Bitset 类创建一种特殊类型的数组来保存位值。BitSet 中数组大小会随需要增加。这和位向量(vector of bits)比较类似。

这是一个传统的类,但它在 Java 2 中被完全重新设计。

BitSet 定义了两个构造方法。

第一个构造方法创建一个默认的对象:

BitSet()

第二个方法允许用户指定初始大小。所有位初始化为 0。

BitSet(int size)

BitSet 中实现了 Cloneable 接口中定义的方法如下表所列:






向量(Vector)

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

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

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

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

  • Vector 是同步访问的。

  • Vector 包含了许多传统的方法,这些方法不属于集合框架。

Vector 主要用在事先不知道数组的大小,或者只是需要一个可以改变大小的数组的情况。

Vector 类支持 4 种构造方法。

第一种构造方法创建一个默认的向量,默认大小为 10:

Vector()

第二种构造方法创建指定大小的向量。

Vector(int size)

第三种构造方法创建指定大小的向量,并且增量用 incr 指定。增量表示向量每次增加的元素数目。

Vector(int size,int incr)

第四种构造方法创建一个包含集合 c 元素的向量:

Vector(Collection c)

除了从父类继承的方法外 Vector 还定义了以下方法:



栈(Stack)

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

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

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

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

除了由向量定义的所有方法,也定义了自己的一些方法。

堆()

除了由向量定义的所有方法外,自己还定义了一些方法:




字典(Dictionary)

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

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

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

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

给出键和值,你就可以将值存储在 Dictionary 对象中。一旦该值被存储,就可以通过它的键来获取它。所以和 Map 一样, Dictionary 也可以作为一个键/值对列表。

Dictionary 定义的抽象方法如下表所示:




哈希表(Hashtable)

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

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

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

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

然而,Java 2 重构的 Hashtable 实现了 Map 接口,因此,Hashtable 现在集成到了集合框架中。它和 HashMap 类很相似,但是它支持同步。

像 HashMap 一样,Hashtable 在哈希表中存储键/值对。当使用一个哈希表,要指定用作键的对象,以及要链接到该键的值。

然后,该键经过哈希处理,所得到的散列码被用作存储在该表中值的索引。

Hashtable 定义了四个构造方法。第一个是默认构造方法:

Hashtable()

第二个构造函数创建指定大小的哈希表:

Hashtable(int size)

第三个构造方法创建了一个指定大小的哈希表,并且通过 fillRatio 指定填充比例。

填充比例必须介于 0.0 和 1.0 之间,它决定了哈希表在重新调整大小之前的充满程度:

Hashtable(int size,float fillRatio)

第四个构造方法创建了一个以 M 中元素为初始化元素的哈希表。

哈希表的容量被设置为 M 的两倍。

Hashtable(Map m)

Hashtable 中除了从 Map 接口中定义的方法外,还定义了以下方法:



属性(Properties)

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

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

属性继承于 Hashtable。表示一个属性集。属性列表中的每个键和值都是一个字符串。

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

属性定义为实例变量。该变量持有一个属性对象相关的默认属性列表。

属性默认值;

属性类定义了两个构造方法。第一个构造方法没有默认值。

特性()

二个构造方法使用 propDefault 作为默认值。情况下,属性列表都为空:

属性(属性 propDefault)

除了从 Hashtable 中定义的方法,Properties 还定义了以下方法:



关键词:java培训

用户头像

编程江湖

关注

IT技术分享 2021.11.23 加入

还未添加个人简介

评论

发布
暂无评论
Java常见数据结构详解