8.9 练习

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 中提供了参数化类型,利用它们便可自动完成这一工作(还有其他许多好处)。

上一页