对数组的理解:可以通过整型索引访问,尺寸不能改变。
数组相对于容器而言,效率最高的存储和随机访问序列的方式。代价就是大小被固定,并在生命周期中无法改变。最大的优势在于效率。
public class ArrayMultidimensionalTest {
//多维数组
public static void main(String args[]){
int[][] a={
{1,2,3},{4,5,6}
};
System.out.println(Arrays.deepToString(a));
//多维的数组
Integer[][] b;
b=new Integer[3][];
for (int i=0;i<b.length;i++){
b[i]=new Integer[3];
for (int j=0;j<b[i].length;j++){
b[i][j]=i*j;
}
}
System.out.println(Arrays.deepToString(b));
System.out.println(b[1][2]);
}
}
无论使用哪种类型的数组,数组标识符其实只是一个引用,指向在堆中创建的一个对象,这个数组对象用以保存指向其他对象的引用。对象数组和基本数据类型的数组唯一的区别在于数组保存的是引用,而基本数据类型保存的是基本类型的值。
数组中提供一系列创建测试数据的方式。
java.utli类库中有Arrays类,提供了一系列基于数组的static方法,equals()判断两个数组是否相等(deepEquals()用于多维数组),fill方法常常用于产生测试数据,用一个值填充各个位置,针对对象的话,就是复制同一个引用进行填充。sort()用于对数组进行排序。binarySearch()用于在已经排序的数组中查找元素。toString()用于产生数组的String标示,hashCode用于产生数组的散列码。Arrays.asList()接受任意序列和数组作为参数,转变为list容器。
关于数组的排序。程序设计的基本目标是将保持不变的事物与将会发生变化的部分相分离。在这里不变的地方是通用的排序算法,变化的是各种对象相互比较的方式。通过策略的设计模式,将会发生改变的代码封装在单独的类中(策略对象),可以将策略对象传递给总是相同的代码。用这种方式,你可以用不同的对象来表达不同的比较方式,然后把它们传递给相同的排序方式。
Java中实现比较功能的方式有两种,其中一种是实现java.lang.Comparable接口,使类具有天生的比较能力,此接口较为简单,只有一个compareTo方法,接受另一个object为参数,如果当前对象小于参数则返回负值,相等返回0,如果大于则返回正值。这个地方没有处理。可能值得处理。即关于comparable方法
现在的容器除了性能以外,其它方面都使得数组相形见绌。优先使用容器而不是数组,只有在性能构成问题的时候(而这一般都不是问题)。诸如Python这样的语言,只提供尺寸可调的容器,根本没有尺寸固定的数组。