1、数组的特殊性
数组与其他种类的容器之间的区别有三方面:效率、类型和保存基本类型的能力。
在java中,数组是一种效率最高的存储和随机访问对象引用序列的方式。数组就是一个简单的线性序列,这使得元素访问非常快速。但为这种速度多付出的代价是数组对象的大小被固定,并且在其生命周期中不可改变。
随着泛型和自动包装机制的出现,数组硕果仅存的优点就是效率。要解决更一般化的问题,数组就可能会受到过多的限制,因此在这些情形下还是会使用容器。
2、Arrays实用功能
在讨论Arrays方法之前,先看看另一个很有用的方法:System.arraycopy()。它用来复制数组比for循环复制快很多。此方法的参数有:源数组,表示从源数组中的什么位置开始复制的偏移量,目的数组,表示从目的数组的什么位置开始复制的偏移量,需要复制的元素个数。
fill()方法:只能用同一个值填充数组各个位置。
equals():用于比较两个数组是否相等(deepEquals()用于多为数组)。数组相等的条件是元素个数必须相等,并且对应位置的元素也相等。
数组元素的比较:java有两种方式来提供比较功能。
第一种是实现java.lang.Comparable接口。此接口只有compareTo()一个方法。此方法接收另一个Object为参数,如果当前对象小于参数则返回负值,如果相等则返回零,如果当前对象大于参数则返回正值。
第二种是可以创建一个实现Comparator接口的单独的类。这个接口有compare()和equals()两个方法。不一定要实现equals()方法,除非有特许的性能需要。
数组排序:sort()方法,java标准库中的排序算法针对正排序的特殊类型进行了优化——针对基本类型设计的“快速排序”,以及针对对象设计的“稳定归并排序”。
在已排序的数组中查找:binarySearch()。
toString():产生数组的String表示。
hashCode():产生数组的散列码。
asList():接受任意的序列或数组作为其参数,并将其转变为List容器。