java集合框架完美教程四

历史集合类
介绍
虽然本教程讨论的是 Java 2 SDK 的新“集合框架”,但有些时候,您还是需要用到一些原始的集合功能。 本章节回顾了一些处理数组、向量、散列表、枚举的功能以及其它历史功能。
回页首
数组
早在学习 Java 编程语言的时候,大家就对数组有所了解了。数组被定义为同类型数据的定长集合。它们是支持基本数据类型存储的唯一集合。包括数组在内的其它每种集合,都可以存储对象。 创建数组时,您指定要存储对象的数量和类型。 而且,在某个数组的生存期中,不能增加或存储一个不同的类型(除非它继承了初始类型)。
要知道数组大小,您可以用 array.length 的形式询问它单个公有实例变量,length。
要访问一个特定元素,无论设置还是获取,您可以把方括号限制的整型参数([int])放在数组引用变量的前面或后面。整型下标从零开始,访问超过数组任何一端都会在运行时抛出 ArrayIndexOutOfBoundsException 异常。但如果,您使用 long 变量访问数组下标,却会产生编译时错误。
数组是 java.lang.Object 的功能齐全的子类。 它们可以通过除对象以外的各种 Java 结构使用:
Object obj = new int[5];
if (obj instanceof int[]) {
  // true
}
if (obj.getClass().isArray()) {
  // true
}
创建完成后,数组被自动初始化,boolean 数组被初始化为 false, Object 数组为 null,其它的都被初始化成与 0 在数值上等价的值。
要复制一个数组,很可能会把数组变得更大,您可以使用 System 的 arraycopy() 方法。你需要预先分配目的数组空间。
System.arraycopy(Object sourceArray, int
        sourceStartPosition, Object destinationArray, int
        destinationStartPosition, int length)
回页首
Vector 类和 Stack 类
Vector 是个像可增大数组的历史集合类,但它可以存储不同类型的数据元素。Java 2 SDK,版本 2 中 Vector 类被改良到“集合框架”层次结构中以实现 List 接口。但是,如果您在使用新框架,您应该使用 ArrayList,而不是 List。
从 Vector 转换为 ArrayList 时,一个关键的差别是 ― 为了更改元素值的位置,参数的顺序被颠倒了:
从原始的 Vector 类 
void setElementAt(Object element, int index)
从 List 接口中 
void set(int index, Object element)
Stack 类继承 Vector,通过 push() 和 pop() 方法以实现一个标准的后进先出(last-in-first-out(LIFO))堆栈。可是,我们要当心。因为 Stack 类继承 Vector 类,您仍然可以用被继承的 Vector 的方法访问或修改 Stack。
回页首
Enumeration 接口
Enumeration 接口允许您迭代集合中的所有元素。在“集合框架”中,该接口被 Iterator 接口替代。但是,并不是所有的库都支持较新的接口,所以您可能会发现自己常常使用 Enumeration。
尽管有些人更喜欢 Iterator 这个方法名称,但用 Enumeration 迭代和用 Iterator 迭代类似。不过,Enumeration 不支持除去操作。
Enumeration enum = ...;
while (enum.hasNextElement()) {
  Object element = iterator.nextElement();
  // process element
}
回页首
Dictionary 类、Hashtable 类和 Properties 类
Dictionary 类完全充斥着抽象方法。换句话说,它本该是个接口。在历史集合类中,它构成了键-值对集合的基础,在新的框架中,Map 取代了它的位置。Hashtable 和 Properties 是 Dictionary 的两种特定实现。
Hashtable 实现是个一般的字典,它允许存储任何对象作为它的键或值(包括 null)。 在 Java 2 SDK,版本 1.2 中,这个类被重新改写到“集合框架”中去实现 Map 接口。所以,您可用原始的 Hashtable 方法或较新的 Map 方法。如果您需要一个同步的 Map,使用 Hashtable 比使用同步的 HashMap 稍快一些。
Properties 实现是处理文本字符串专门的 Hashtable。 当您必须把检索自 Hashtable 的值类型强制转换成您想要的类时,Properties 类允许您不通过类型强制转换就可以得到文本值。该类还支持来自输入流或通向输出流的装入和保存的属性设置。最常用的一组属性集是系统属性列表,可以用 System.getProperties() 检索到。
回页首
BitSet 类
BitSet 是集的另一种表示。给定 n 个有限对象,您可以把每个对象看成一个唯一的整数。那么,这些对象可能存在的每个子集就可以对应一个 n 位的向量,向量中每位用“开”或“关”表示对象是否在子集中。对于 n 值很小的情况,位向量可以是一种极其紧凑的表示法。 但是,对于 n 值很大的情况,如果大多数的位状态都是关的话,实际的位向量效率可能很低。
新的框架中没有可以替代 BitSet 的东西。
回页首
练习
练习 1. 如何将 HashSet 用于一个稀疏的位集

你可能感兴趣的:(Java集合框架)