数组的特殊性
无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用。
《Java编程思想》
1. 局限性
1.1 数组对象的只读成员length :表示该数组能够容纳多少元素
1.2 数组有个缺点:无法直接知道该数组保存了多少元素,但是可以通过统计默认值的个数来大概知道数组保存的元素数量,例如:引用类型数组初始对象都是null,数值类型数组初始化值为0
2. 多维数组
数组中构成矩阵的每个向量都可以具有任意的长度(这被称为粗糙数组)
参考代码:
import java.util.*;
public class RaggedArray{
public static void main(String[] args){
Random rand = new Random(47);
int[][][] a = new int[rand.nextInt(7)[][];
for(int i=0;i<a.length;i++){
a[i] = new int[rand.nextInt(5)][];
for(int j=0;j<a[i].length;j++){
a[i][j] = new int[rand.nextInt(5)];
}
}
}
}
3. 数组和泛型
3.1 Java无法实例化带有泛型的数组,例如:
List<Integer>[] ar = new ArrayList<Integer>[];
会报以下编译错误:Cannot create a generic array of ArrayList
4. 填充数组
4.1 Arrays.fill(Object[],object)
5. Arrays实用功能
5.1 复制数组
不属于Arrays,属于System,使用方法:System.arraycopy(原数组,表示从原数组中的什么位置开始复制的偏移量,目标数组,表示从目标数组开始复制的偏移量,以及需要复制的元素个数)。
5.2 数组元素的比较
主要涉及Comparator和Comparable接口,可参考博文:http://www.cnblogs.com/sunflower627/p/3158042.html
5.3 数组排序
排序的前提是实现Comparator或者Comparable接口,使用Arrays.sort(数组)
的方法进行排序。
Java标准类库中的排序算法针对正排序的特殊类型进行了优化——针对基本类型设计的“快速排序”,以及针对对象设计的“稳定归并排序”。
5.4 数组中查找
查找的前提是数组已经进行了排序,然后使用Arrays.binarySearch()执行查找。查找成功则返回元素索引,查找失败返回负值,该负值表示目标元素应该插入的位置(计算方法:- 插入点 - 1)。