# 8.9 练习
(1) 新建一个名为Gerbil
的类,在构造器中初始化一个int gerbilNumber
(类似本章的Mouse
例子)。为其写一个名为hop()
的方法,用它打印出符合hop()
条件的Gerbil
的编号。建一个Vector
,并为Vector
添加一系列Gerbil
对象。现在,用elementAt()
方法在Vector
中遍历,并为每个Gerbil
都调用hop()
。
(2) 修改练习1,用Enumeration
在调用hop()
的同时遍历Vector
。
(3) 在AssocArray.java
中,修改这个例子,令其使用一个Hashtable
,而不是AssocArray
。
(4) 获取练习1用到的Gerbil
类,改为把它置入一个Hashtable
,然后将Gerbil
的名称作为一个String
(键)与置入表格的每个Gerbil
(值)都关联起来。获得用于keys()
的一个Enumeration
,并用它在Hashtable
里遍历,查找每个键的Gerbil
,打印出键,然后将gerbil
告诉给hop()
。
(5) 修改第7章的练习1,用一个Vector
容纳Rodent
(啮齿动物),并用Enumeration
在Rodent
序列中遍历。记住Vector
只能容纳对象,所以在访问单独的Rodent
时必须采用一个转换(如RTTI)。
(6) 转到第7章的中间位置,找到那个GreenhouseControls.java
(温室控制)例子,该例应该由三个文件构成。在Controller.java
中,类EventSet
仅是一个集合。修改它的代码,用一个Stack
代替EventSet
。当然,这时可能并不仅仅用Stack
取代EventSet
这样简单;也需要用一个Enumeration
遍历事件集。可考虑在某些时候将集合当作Stack
对待,另一些时候则当作Vector
对待——这样或许能使事情变得更加简单。
(7) (有一定挑战性)在与所有Java发行包配套提供的Java源码库中找出用于Vector
的源码。复制这些代码,制作名为
intVector
的一个特殊版本,只在其中包含int
数据。思考是否能为所有基本数据类型都制作Vector
的一个特殊版本。接下来,考虑假如制作一个链接列表类,令其能随同所有基本数据类型使用,那么会发生什么情况。若在Java中提供了参数化类型,利用它们便可自动完成这一工作(还有其他许多好处)。