正在加载图片...
Thinking in Java 3Edition 11:对象的集合 如果程序的对象数量有限,且寿命可知,那么这个程序是相当 简单的。 一般来说,程序都是根据具体情况在不断地创建新的对象,而这些情况又 只有在程序运行的时候才能确定。不到运行时你是不会知道你到底需要多 少对象,甚至是什么类型的对象。为了解决这种常见的编程问题,你得有 办法能在任何时间,任何地点,创建任何数量的对象。所以你不能指望用 命名的 reference来持有每个对象 Myobject 原因就在于,你不可能知道究竟需要多少这样的对象 针对这个相当关键的问题,绝大多数语言都提供了某种解决办法。Java 也提供了好几种持有对象(或者更准确的说,是对象的 reference)的方 法。我们前面讨论的数组是语言内置的数据类型。此外,Java的工具类 库还包括一套比较完整的容器类( container classes也被称为 co∥ lection classes,但是由于 Collection被Java2用来命名类库的 某个子集,所以我还是用概括性更强的术语" container")。它提供了复杂 而精致的方法来持有甚至是操控你的对象。 数组 我们已经在第4章的最后部分,对数组的绝大多数内容作了必要的介绍, 此外我们还演示了如何定义和初始化一个数组。本章的所关注的问题是 “持有对象”,而数组只是其中的一个方法。那么数组又是凭什么要我们 如此重视的呢? 数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有 primitives。数组是Java提供的,能随机存储和访问 reference序列的 诸多方法中的,最高效的一种。数组是一个简单的线性序列,所以它可以 快速的访问其中的元素。但是速度是有代价的;当你创建了一个数组之 后,它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先 创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧数组里 的 reference全部导到新的里面。其实(我们以后会讲的) Array List就 是这么做的。但是这种灵活性所带来的开销,使得 Array List的效率比 起数组有了明显下降 C++的 vector容器类确实能知道它到底持有了什么类型的对象,但是 与Java的数组相比,它又有另一个缺点:C++ vector的[]运算符不 第1页共106页 www.wgqqh.com/shhgs/tij.html emailshhgsasohu.comThinking in Java 3rd Edition 第 1 页 共 106 页 www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.com 11:对象的集合 如果程序的对象数量有限,且寿命可知,那么这个程序是相当 简单的。 一般来说,程序都是根据具体情况在不断地创建新的对象,而这些情况又 只有在程序运行的时候才能确定。不到运行时你是不会知道你到底需要多 少对象,甚至是什么类型的对象。为了解决这种常见的编程问题,你得有 办法能在任何时间,任何地点,创建任何数量的对象。所以你不能指望用 命名的 reference 来持有每个对象: MyObject myReference; 原因就在于,你不可能知道究竟需要多少这样的对象。 针对这个相当关键的问题,绝大多数语言都提供了某种解决办法。Java 也提供了好几种持有对象(或者更准确的说,是对象的 reference) 的方 法。我们前面讨论的数组是语言内置的数据类型。此外,Java 的工具类 库还包括一套比较完整的容器类(container classes 也被称为 collection classes,但是由于 Collection 被 Java 2 用来命名类库的 某个子集,所以我还是用概括性更强的术语"container")。它提供了复杂 而精致的方法来持有甚至是操控你的对象。 数组 我们已经在第 4 章的最后部分,对数组的绝大多数内容作了必要的介绍, 此外我们还演示了如何定义和初始化一个数组。本章的所关注的问题是 “持有对象”,而数组只是其中的一个方法。那么数组又是凭什么要我们 如此重视的呢? 数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有 primitives。数组是 Java 提供的,能随机存储和访问 reference 序列的 诸多方法中的,最高效的一种。数组是一个简单的线性序列,所以它可以 快速的访问其中的元素。但是速度是有代价的;当你创建了一个数组之 后,它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先 创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧数组里 的 reference 全部导到新的里面。其实(我们以后会讲的)ArrayList 就 是这么做的。但是这种灵活性所带来的开销,使得 ArrayList 的效率比 起数组有了明显下降。 C++的 vector 容器类确实能知道它到底持有了什么类型的对象,但是 与 Java 的数组相比,它又有另一个缺点:C++ vector 的[]运算符不
向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有