Think in Java读书笔记--对象的容纳

如果一个程序只含有数量固定的对象,而且已知它们存在的时间,那这个程序时相当简单的。

数组

容纳对象有很多方式,数组是其中最为普遍的一种,它主要有如下两个特点:效率和类型。对于Java来说,为保存和访问一系列对象(实际是对象的句柄),最有效率的方法莫过于数组。数组实际是一个简单的线性序列,因此访问速度非常的快,但是它也存在一些限制,如数组的大小是固定的,并且不可以在“存在时间”内发生改变。

对于基本数据类型构成的数组,其运作类型跟对象数组相似,所不同的是前者里面保存的不是对象的句柄,而是实际的数值。

集合

编程的时候,通常不知道究竟需要保存多少对象,有时甚至想用更复杂的方式来保存对象,为解决这样的问题,Java提供了几种“集合类”:Vector(矢量),BitSet(位集),Stack(堆栈)以及HashTable(散列表)。

集合的缺点:丢失了类型信息。它容纳的实际上是类型为Object的对象的句柄。

枚举器(迭代器)

用集合保存对象后再访问,需要事先知道集合中对象的准确类型,否则使用的过程中会出异常。而迭代器可以解决这个问题。迭代器是一个对象,其作用是遍历一系列对象,并选择那个序列中的每个对象,同时不让客户程序员知道或关注那个序列的基础结构。

Java中的Enumeration就是一个典型的迭代器,主要用来干如下事情:

(1)用一个名为Elements的方法要求集合为我们提供一个Enumeration,首次调用其NextElements时,这个Enumeration会返回序列中的第一个元素。

(2)用NextElements获取下一个对象。

(3)用HasMoreElements检查是否有更多的对象。

集合的类型:

1. Vector

Vector 类可实现可增长的对象数组。与数组一样,它包含可以使用整数索引进行访问的组件。但是,Vector 的大小可以根据需要增大或缩小,以适应创建 Vector 后进行添加或移除项的操作。

2. BitSet

BitSet实际是由“二进制位”构成的一个Vector。如果希望高效率地保存大量“开-关”信息,就应使用BitSet。位set 的每个组件都有一个 boolean 值。用非负的整数将 BitSet 的位编入索引。可以对每个编入索引的位进行测试、设置或者清除。通过逻辑与、逻辑或和逻辑异或操作,可以使用一个 BitSet 修改另一个 BitSet 的内容。 默认情况下,set 中所有位的初始值都是 false。

3. Stack

Stack也称为“后入先出”集合。Java中的Stack类继承自Vector类,它通过五个操作对类 Vector 进行了扩展 ,允许将向量视为堆栈。它提供了通常的 push 和 pop 操作,以及取堆栈顶点的 peek 方法、测试堆栈是否为空的 empty 方法、在堆栈中查找项并确定到堆栈顶距离的 search 方法。

4. HashTable

这个在其它语言里面很常见,这里就不说了。

posted @ 2012-06-28 11:37  Core Hua  阅读(295)  评论(0编辑  收藏  举报