数组的定义:是相同类型的、用一个标识符名称封装到一起的一个对象或基本类型数据序列。数组是通过方括号下标操作符[]来定义和使用的。要定义一个数组,只需在类型名后面加上一对空方括号即可:
int[] a1;
int[] a2 = {1,2,3};
java中可以将一个数组复制给另一个数组,但只是复制了一个引用。
无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个真实对象,这个(数组)对象用以保存指向其他对象的引用。只读成员length是数组对象的一部分(这是唯一可以访问的字段或方法),表示次数组对象可以存储多少元素。[]是访问数组对象的唯一方式。
基本类型数组,数值型自动初始化为0,字符O,布尔boolean为false.
对象数组和基本类型数组在使用上几乎是相同的,唯一区别就是对象数组保存的是引用,基本类型数组直接保存基本类型的值。
java中数组是效率最高的存储和随机访问对象引用序列的方式。
对于基本类型多维数组,可以通过花括号将每个向量分割开。
如何逐个地、部分地构建一个非基本类型的对象数组:
public class Test{
public static void main(String[] args){
Integer[][] a;
a = new Integer[3][];
for(int i =0;i<a.length;i++){
a[i] = new Integer[3];
for(int j=0;j<a[i].length;j++){
a[i][j] = i*j;
}
}
System.out.println(Arrays.deepToString(a));
}
}
数组必须知道他们所持有的确切类型,以强制保证类型安全。
创建测试数据:
java标准类库Arrays有一个作用十分有限的fill()方法:只能用同一个值填充各个位置。
Arrays.fill(数组名,value);
public interface Generator<T> {
T next();
}
class CountingGenerator{
public static class Boolean implements Generator<java.lang.Boolean>{
private boolean value = false;
public java.lang.Boolean next(){
value = !value;
return value;
}
}
public static class Integer implements Generator<java.lang.Integer>{
private int value = 0;
public java.lang.Integer next() {
return value++;
}
}
}
public class GeneratorsTest {
public static int size =10;
public static void test(Class<?> suClass) throws InstantiationException, IllegalAccessException {
for(Class<?> type : suClass.getClasses()) {
System.out.print(type.getSimpleName()+":");
Generator<?> g = (Generator<?>)type.newInstance();
for(int i =0;i<size;i++) {
System.out.print(g.next());
System.out.println();
}
}
}
public static void main(String[] args) throws InstantiationException, IllegalAccessException {
test(CountingGenerator.class);
}
}
Arrays类,有一套用于数组的static使用方法:
equals()用于比较数组是否相等。
fill()
binarySearch();用于已经排序的数组查找元素。
toString();产生数组的String;
复制数组:
System.arraycopy();
数组排序:
Arrays.sort();
应该优先选择容器而不是数组。