Legacy Class in Java

2025 年 3 月 28 日 | 阅读 6 分钟

在过去十年中,Java 中并未包含 Collection 框架。在 Java 的早期版本中,我们有几个类和接口可以存储对象。在 JSE 1.2 中添加 Collection 框架后,为了支持集合框架,这些类被重新设计了。因此,在旧版本的 Java 中构成集合框架的类和接口被称为 遗留类。为了支持 JDK5 中的泛型,这些类被重新设计了。

所有遗留类都是同步的。java.util 包定义了以下 遗留

  1. HashTable
  2. Stack
  3. 字典
  4. 性质
  5. Vector
Legacy Class in Java

Vector 类

Vector 是一种特殊的 ArrayList,它定义了一个动态数组。ArrayList 不同步,而 vector 是同步的。Vector 类有几个遗留方法,这些方法在集合框架中不存在。在 JDK 5 发布后,Vector 实现 Iterable,这表明 Vector 与集合完全兼容,并且可以通过 for-each 循环迭代 Vector 元素。

Vector 类提供了以下四种构造函数

1) Vector()

当我们想要创建一个初始大小为 10 的默认向量时使用它。

2) Vector(int size)

用于创建指定容量的向量。它接受 size 作为参数来指定初始容量。

3) Vector(int size, int incr)

用于创建指定容量的向量。它接受 size 和 increment 两个参数,用于指定初始容量以及向量在添加对象而调整大小时分配元素的数量。

4) Vector(Collection c)

用于创建包含集合中相同元素的向量。它接受集合作为参数。

VectorExample.java

输出

Legacy Class in Java

Hashtable 类

Hashtable 类类似于 HashMap。它也以键/值对的形式存储数据。因为它已同步,所以不允许输入任何 null 键和值。就像 Vector 一样,Hashtable 也有以下四种构造函数。

1) Hashtable()

当我们希望创建一个默认大小为 11 的 HashTable 时使用它。

2) Hashtable(int size)

用于创建指定大小的 HashTable。它接受 size 作为参数来指定其初始大小。

3) Hashtable(int size, float fillratio)

它创建指定大小和填充比率的 Hashtable。它接受两个参数:size(类型为 int)和 fillratio(类型为 float)。fillratio 必须在 0.0 到 1.0 之间。fillratio 参数决定在哈希表被向上调整大小时可以填满的程度。这意味着当我们输入的元素超过其容量或大小时,Hashtable 会通过将其大小乘以 fullratio 来扩展。

4) Hashtable(Map< ? extends K, ? extends V> m)

用于创建 Hashtable。Hashtable 会用 m 中存在的元素进行初始化。Hashtable 的容量是 m 中存在的元素数量的两倍。

HashtableExample.java

输出

Legacy Class in Java

Properties 类

Properties 类继承自 Hashtable 类,用于维护值列表。该列表的键和值都是字符串类型。Property 类有两个构造函数

1) Properties()

用于创建一个没有默认值的 Properties 对象。

2) Properties(Properties propdefault)

用于使用指定的 Properties 类型参数来创建 Properties 对象作为其默认值。

Hashtable 和 Properties 类之间的主要区别在于,在 Hashtable 中,我们无法设置默认值,以便在没有与某个键关联的值时使用它。但在 Properties 类中,我们可以设置默认值。

PropertiesExample.java

输出

Legacy Class in Java

Stack 类

Stack 类继承自 Vector 类,该类遵循 LIFO(后进先出)原则来处理其元素。Stack 实现只有一个默认构造函数,即 Stack()。

1) Stack()

用于创建一个不包含任何元素的栈。

可以使用以下方法处理 Stack 类

  1. push() 方法用于将对象添加到栈中。它将元素添加到栈的顶部。
  2. pop() 方法用于获取或移除栈的顶部元素。
  3. peek() 方法类似于 pop() 方法,但它不能使用它移除栈的顶部元素。
  4. empty() 方法用于检查栈是否为空。当栈中没有元素时,它返回 true。
  5. search() 方法用于确保指定的对象是否存在于栈中。

StackExample.java

输出

Legacy Class in Java

Dictionary 类

Dictionary 类在功能上与 Map 非常相似,并代表 键/值 存储库。Dictionary 类是一个抽象类,它以键/值对的形式存储数据。我们可以将字典定义为键/值对的列表。

Dictionary 类提供了以下方法

  1. put(K key, V value) 方法用于将键值对添加到字典中。
  2. elements() 方法用于获取字典中的值表示。
  3. get(Object key) 方法用于获取字典中与参数键映射的值。
  4. isEmpty() 方法用于检查字典是否为空。
  5. keys() 方法用于获取字典中的键表示。
  6. remove(Object key) 方法从字典中移除数据。
  7. size() 方法用于获取字典的大小。

DictionaryExample.java

输出

Legacy Class in Java

以上讨论的所有类都称为遗留类。为了支持 JDK5 中的泛型,对上述讨论的类进行了重新设计。