对象的集合

zhushican | 建站教程 | 2014年8月14日

如果程序的对象数量有限,且寿命可知,那么这个程序是相当简单的。一般来说,程序都是根据具体情况在不断地创建新的对象,而这些情况又只有在程序运行的时候才能确定。不到运行时你是不会知道你到底需要多少对象,甚至是什么类型的对象。为了解决这种常见的编程问题,你得有办法能在任何时间,任何地点,创建任何数量的对象。所以你不能指望用命名的reference来持有每个对象。

针对这个相当关键的问题,绝大多数语言都提供了某种解决办法。Java也提供了好几种持有对象(或者更准确的说,是对象的reference)的方法。我们所说的数组是语言内置的数据类型。此外,Java的工具类库还包括一套比较完整的容器类(container classes也被称为collection classes,但是由于collection被Java用来命名的类库的某个子集,所以我还是用概括性更强的属于“container”)。它提供了复杂而精致的方法来持有甚至是操控你的对象。数组与其它容器的区别体现在三个方面:效率,类型识别以及可以持有primitives。数组是Java提供的,能随机存储和访问reference序列的诸多方法中的,最高效的一种。

[阅读全文]
9次浏览 0条评论 对象  集合  

数组是第一流的对象

zhushican | 建站教程 | 2014年8月14日

数组是一个简单的线性序列,所以它可以快速的访问其中的元素。但是速度是有代价的;当你创建了一个数组之后它的容量就固定了,而且在其生命周期里不能改变。也许你会提议先创建一个数组,等到快不够用的时候,再创建一个新的,然后将旧数组里的reference全部导到新的里面。其实arrayList就是这么做的。但是这种灵活性所带来的开销,使得arrayList的效率比起数组有了明显的下降。

不管你用的是哪种类型的数组,数组的标识符实际上都是一个“创建在堆里的实实在在的对象”reference。实际上是那个对象持有其他对象的reference。你既可以用数组的初始化语句,隐含地创建这个对象,也可以用new表达式,明确创建这个对象。只读的length属性能告诉你数组能存储多少元素。但是,创建数组对象的时候,它所持有的reference都会被自动地初始化为null,所以你可以通过检查数组的某个槽位是否为null,来判断它是否持有对象。以此类推,primitive的数组,会自动将数字初始化为零。

[阅读全文]
2次浏览 0条评论 数组  第一流  对象  
回顶部