数组是第一流的对象

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

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

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

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

数组的排序

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

有了内置的排序方法之后,你就能对任何数组排序了,不论是primitive的还是对象数组,只要它实现了comparable接口或有一个与之相关的comparator对象就行了。这个功能填补了Java类库的一个大漏洞。标准类库所用的排序算法已经做了优化——对primitive,它用的是快速排序,对对象,它用的是稳定合并排序。所以除非是prolier表明排序算法是瓶颈,否则你不用为性能担心。

一旦数组排完序,你就能进行快速查询了。但是切记对一个尚未排序的数组使用查询,因为这么做的结果是没有意义的。如果数组里面有重复元素,那它不能保证会返回哪一个。这个算法不支持重复元素,不过它也不报错。所以,如果你需要的是一个无重复元素的有序序列的话,那么可以考虑使用Treeset。

[阅读全文]
11次浏览 0条评论 数组  排序  
回顶部