double[][] c=newdouble[M][N];c是一个M行N列的二维数组,在内存存储时,c的每个元素又是一个一维数组,存放的是对应一维数组的引用,这里每个对象引用地址为8个字节,总共占用24+8M+M(24+8N))=24+32M+8MN个字节。对象开销←16字节头信息长度N4字节对象开销←16字节填充字节4字节头信息长度N←4字节填充字节4字节N个double值占用8N个字节M个一维数组引用,占用8M个字节对象开销16字节头信息长度N一4字节一4字节填充字节N个double值占用8N个字节16/57
对象开销 长度N 填充字节 . 16字节 4字节 4字节 头信息 M个一维数 组引用,占 用8M个字节 对象开销 长度N 填充字节 . . . 16字节 4字节 4字节 头 信 息 对象开销 长度N 填充字节 . . . 16字节 4字节 4字节 头 信 息 N个double值, 占用8N个字节 N个double值, 占用8N个字节 double[][] c=new double[M][N]; c是一个M行N列的二维数组,在内存存储时,c的每个元素又是一个一维数组, 存放的是对应一维数组的引用,这里每个对象引用地址为8个字节,总共占用 24+8M+M(24+8N)=24+32M+8MN个字节。 16/57
Java数组的说明(1)Java数组都是静态数组,一旦被声明其容量就固定了,不能改变。所以在声明数组时,一定要考虑数组的最大容量,防止容量不够的现象。(2)如果希望在执行程序时动态改变容量,可以使用Java集合中的ArrayList或者Vector容器。17/57
(1)Java数组都是静态数组,一旦被声明其容量就固定了,不 能改变。所以在声明数组时,一定要考虑数组的最大容量,防止容量 不够的现象。 (2)如果希望在执行程序时动态改变容量,可以使用Java集合 中的ArrayList或者Vector容器。 17/57
(3)由于Java中数组(非基本类型的一维数组或者二维及以上的数组)并不像C/C++数组占用一片连续空间,所以C/C++数组的一些优化操作并不适合Java数组。例如,在C/C++中定义二维数组:int a[500][1000];//程序段1for (int i=0;i<500;i++)for (int j=0;j<1000;j++)a[i][j]=i+j;1/程序段2for((int j=0;j<1000;j++)for(inti=0;i<500;i++)a[i][j]=i+j;程序段1的性能明显好于程序段2,这是因为C/C++数组按行优先存储,而程序段1的访问顺序恰好也是按行优先访问的。但在Java中性能的提升不明显,这是因为Java中二维数组的所有元素并非占用一片连续空间,需要寻址访间元素。18/57
(3)由于Java中数组(非基本类型的一维数组或者二维及以上的数组)并不像 C/C++数组占用一片连续空间,所以C/C++数组的一些优化操作并不适合Java数 组。例如,在C/C++中定义二维数组: int a[500][1000]; for (int i=0;i<500;i++) //程序段1 for (int j=0;j<1000;j++) a[i][j]=i+j; for (int j=0;j<1000;j++) //程序段2 for (int i=0;i<500;i++) a[i][j]=i+j; 程序段1的性能明显好于程序段2,这是因为C/C++数组按行优先存储, 而程序段1的访问顺序恰好也是按行优先访问的。 但在Java中性能的提升不明显,这是因为Java中二维数组的所有元素 并非占用一片连续空间,需要寻址访问元素。 18/57
3.Java中的数组类ArraysJava中提供了Arrays类可以方便地操作数组,它提供的所有方法都是静态的,实际上在Java中建立的各种数组都看成Arrays类的实例。Arrays类的主要方法(以int数据类型为例)(1)static int binarySearch(int[]a,intkey):使用二分搜索法来搜索int型数组a,以获得指定的值。(2) static int binarySearch(int[] a, int fromIndex,inttoIndex,intkey:使用二分搜索法来搜索int数组a的[fromIndex,toIndex)范围,以获得指定的值。该范围从索引fromIndex(包括)一直到索引toIndex(不包括)。(3)static boolean equals(int[] a,int[] a2):如果两个指定的int型数组a和a2彼此相等,则返回true。(4)staticvoidfill(int[la,intval):将指定的int值分配给int型数组a的每个元素。(5)staticvoid sort(int[la):对int型数组a按数字升序进行排序19/57
3. Java中的数组类Arrays Java中提供了Arrays类可以方便地操作数组,它提供的所有方法都是 静态的,实际上在Java中建立的各种数组都看成Arrays类的实例。 Arrays类的主要方法(以int数据类型为例) (1)static int binarySearch(int[] a,int key):使用二分搜索 法来搜索int型数组a,以获得指定的值。 (2)static int binarySearch(int[] a,int fromIndex, int toIndex,int key):使用二分搜索法来搜索int数组a的[fromIndex, toIndex)范围,以获得指定的值。该范围从索引fromIndex(包括)一直到 索引toIndex (不包括)。 (3)static boolean equals(int[] a,int[] a2):如果两个指定的 int型数组a和a2彼此相等,则返回true。 (4)static void fill(int[] a,int val):将指定的int值分配给 int型数组a的每个元素。 (5)static void sort(int[] a):对int型数组a按数字升序进行排序。 19/57