I. 简介
数组(array)是保存一系列相同数据的最基本工具。相比于容器(containers),它的功能少、不支持范型(generics),但优点在于插入、取出速度快。
虽然数组有着速度上的优势,但在实际开发中,永远优先考虑容器,因为容器的各项功能更多,使得开发更加快捷方便。在程序执行过慢的情况下,再考虑用数组替代容器。
II. 创建与特点
创建
一维数组
可创建primitive type 的数组,也可以创建包含object的数组。
int [] ints = new int [5]; // 包含5个数值为0的int 数组
String [] strings = {"Test", "Exam"}; // 包含Test、Exam 的String 数组
Object [] objects = new Object [5]; // 包含5个null 的Object 数组
多维数组
上述创建数组为一维,而多维数组也通过类似方式创建。
int [] ints_twoDimentional = new int [5][5]; // 创建5X5的二维int 数组
int [] ints_threeDimentional = new int [5][5][5]; // 创建5X5X5 的三维int 数组
特点
基本特性
数组的长度不可变。
数组中不可插入与数组类型不同的类型。(如在int 数组中不能插入string 类型)同时在编译时(compile time),编译器会自动找出不符合type-checking 的数组操作。
数组和范型
数组不支持范型;而容器支持。
同时需要指出的是,容器中的对象都为Object, primitive type 会被auto boxing 转为Object.
III. Arrays utils
复制数组
System.arraycopy() 用于复制数组;采用此方法的复制速度快于使用for 循环的速度。
int [] i = new int [7];
Arrays.fill(i, 47); // 将i 用47 填满
int [] k = new int [5];
Arrays.fill(k, 103);
// 将k 数组复制到 i 数组中去
System.arraycopy(k, 0, i, 0, k.length); // 第一个参数为被复制数组,第二个参数为被复制数组的复制项的起点,第三个位复制进数组,第四个参数为复制进数组的复制起点,第五个参数为复制终点。
比较数组
可使用Arrays.equals() 方法来比较两个数组。
数组排序
系统自带的Objects(Integer, String 等) 已经实现了Comparable<> 接口,可直接使用Arrays.sort(); 如为自己创建类,想要实现排序功能,需要手动实现Comparable<> 接口
另外一种方法为使用系统自带的Comparator 或自己重写的Comparator 作为第二个参数传入Arrays.sort() 中去。