15.3 Collection类 现在,你已经熟悉了类集接口,下面开始讨论实现它们的标准类。一些类提供了完整 的可以被使用的工具。另一些类是抽象的,提供主框架工具,作为创建具体类集的起始点。 没有Collection类是同步的,但正如你将在本章后面看到的那样,有可能获得同步版本。 标准的Collection类总结在下面的表中。 类描述 AbstractCollection 实现大多数Collection接口 AbstractList 扩展AbstractCollection并实现大多数List接口 AbstractSequentialList 为了被类集使用而扩展AbstractList,该类集使用连续而不是随机方 式访问其元素 LinkedList 通过扩展AbstractSequentialList来实现链接表 ArrayList 通过扩展AbstractList来实现动态数组 AbstractSet 扩展AbstractCollection并实现大多数Set接口 HashSet 为了使用散列表而扩展AbstractSet TreeSet 实现存储在树中的一个集合。扩展AbstractSet 注意:除了Collection类外,还有几个从以前版本遗留下来的类,如Vector,Stack 和Hashtable均被重新设计成支持类集的形式。这些内容将在本章后面讨论。 下面讨论具体的Collection类,举例说明它们的用法。 15.3.1 ArrayList类 ArrayList类扩展AbstractList并执行List接口。ArrayList支持可随需要而增长的动态数 组。在Java中,标准数组是定长的。在数组创建之后,它们不能被加长或缩短,这也就意 味着你必须事先知道数组可以容纳多少元素。但是,你直到运行时才能知道需要多大的数 组。为了解决这个问题,类集框架定义了ArrayList。本质上,ArrayList是对象引用的一个 变长数组。也就是说,ArrayList能够动态地增加或减小其大小。数组列表以一个原始大小 被创建。当超过了它的大小,类集自动增大。当对象被删除后,数组就可以缩小。 注意:动态数组也被从以前版本遗留下来的类Vector所支持。关于这一点,将在 本章后面介绍。 ArrayList有如下的构造函数: ArrayList( ) ArrayList(Collection c) ArrayList(int capacity) 其中第一个构造函数建立一个空的数组列表。第二个构造函数建立一个数组列表,该 306 第2 部分Java 库 数组列表由类集c中的元素初始化。第三个构造函数建立一个数组列表,该数组有指定的初 始容量(capacity)。容量是用于存储元素的基本数组的大小。当元素被追加到数组列表上 时,容量会自动增加。 下面的程序展示了ArrayList的一个简单应用。首先创建一个数组列表,接着添加类型 String的对象(回想一个引用字符串被转化成一个字符串(String)对象)。接着列表被显 示出来。将其中的一些元素删除后,再一次显示列表。 // Demonstrate ArrayList. import java.util.*; class ArrayListDemo { public static void main(String args[]) { // create an array list ArrayList al = new ArrayList(); System.out.println("Initial size of al: " + al.size()); // add elements to the array list al.add("C"); al.add("A"); al.add("E"); al.add("B"); al.add("D"); al.add("F"); al.add(1, "A2"); System.out.println("Size of al after additions: " + al.size()); // display the array list System.out.println("Contents of al: " + al); // Remove elements from the array list al.remove("F"); al.remove(2); System.out.println("Size of al after deletions: " + al.size()); System.out.println("Contents of al: " + al); } } 该程序的输出如下所示: Initial size of al: 0 Size of al after additions: 7 Contents of al: [C, A2, A, E, B, D, F] Size of al after deletions: 5 Contents of al: [C, A2, E, B, D] 注意a1开始时是空的,当添加元素后,它的大小增加了。当有元素被删除后,它的大