Java:数组

Java:数组

一维数组的初始化

int[] arr;  
arr = new int[10];

也可以在声明数组时分配空间:

int[] arr = new int[10];

或者直接指定数组元素的值:

int[] arr = {1,2,3,5,8};

注意:一旦声明了数组的大小,就不能再修改。

二维数组的初始化

int[][] arr = new int[][]{{1,2},{3,4}};
int[][] arr = new int[10][10];
int[][] arr = new int[10][];

二维数组的第二位长度是可以变化的。

获取长度

在一维数组中,数组对象的length属性会返回数组元素的个数。
而对于二维数组,直接使用length返回的是数组的行数。需要在指定的索引后加上length来获取某一行的列数arr[i].length

获取元素

除了通过数组下标以外,还可以使用for each循环遍历数组中的元素。

for (int[] i : arr)
	for(int j : i)
		System.out.println(j);

这种方式不能用来修改数组中元素的值。

Arrays类

Arrays类处于 java.util 包下,其中包含了数组操作的很多方法。

binarySearch:二分查找key在a数组中(from到to索引)出现的索引,若未找到则返回负值。要求数组已经按升序排列。

int binarySearch(type[]  a, type key);
int binarySearch(type[] a, int from, int to, type key);

copyOf/copyOfRange:复制original数组的前length个元素,或from到to索引的元素,返回一个新数组。目标数组如果已经存在,将会被重构。如果original.length小于length或to将用默认值填充。

type[] copyOf(type[] original, int length);
type[] copyOfRange(type[] original, int from, int to);

equals:判断a和b数组的长度和元素是否全部相同。

boolean equals(type[] a, type[] b);

fill:将a数组的所有元素赋值为val。

void fill(type[] a, type val);

sort:对数组(from到to索引)排序。

void sort(type[] a);
void sort(type[] a, int from, int to);

toString:将数组转换为字符串。

String toString(type[] a);

数组的复制

Array.copyOf()Array.copyOfRange()都会将目标数组复制到新数组中,目标数组如果已经存在,将会被重构

arraycopy() 方法位于 java.lang.System 类中。语法形式为:

System.arraycopy(type[] src,int srcIndex,type[] dest,int destIndex,int length)

其中,src 表示原数组;srcIndex 表示原数组中的起始索引;dest 表示目标数组;destIndex 表示目标数组中的起始索引;length 表示要复制的数组长度。目标数组必须已经存在,且不会被重构,即替换目标数组中的部分元素。

clone() 方法位于类 Object 中(数组也属于Object类),可以创建一个有单独内存空间的对象,目标数组如果已经存在,将会被重构。返回值为Object类型,要使用强制类型转换为其他类型。例如:

int[] target = (int[])source.clone();