一维数组
在Java中有两种数据:primitive类型和objects.
数组属于object类型,所以必须用new来创建数组, 同时数组具备一下特性:
1. 数组创建之后就不能改变大小
2. 数组创建之后,若没有指定初始值,则依据数组类型的不同,会预设不同的初始值
int[] myArray; // 定义一个指向数据的refference
myArray = new int[100]; // 创建一个可容纳100个元素的数组,并且用myArray指向它,默认所有的元素值被初始化成0
也可以在创建数组的同时进行初始化, 这种方式不用指定数组的长度:
int[] myArray = {0,3,6,9,12,15,18,21,24,27};
或者
int[] myArray = new int[] {0,3,6,9,12,15,18,21,24,27};
3. 数组有一个length属性,可以取回数组中元素的个数
int arrayLength = myArray.length;
二维数组
二维数组用数组“名称”与“两个索引”来指定存取数组中的元素。
其定义方式与一维数组类似:
int[][] arr = {{1,2,3},
{4,5,6}};
注意length所代表的长度,数组名后直接加上length(如arr.length),所指的是数组有几行; 指定索引后加上length(如arr[0].length),指的是该行拥有的元素,也就是列的数目。
数组的复制
1. 使用System.arraycopy()方法
System.arraycopy(来源,起始索引,目的,起始索引,复制长度);
例如:
int[] arr1 = {1,2,3,4,5};
int[] arr2 = new int[5];
System.arraycopy(arr1, 0, arr2, 0, arr1.length);
2. 在Java SE 6中,Arrays类新增了copyOf()方法,可以直接返回一个新的数组对象,而其中包括复制的内容
例如:
import java.util.Arrays;
int[] arr1 = {1,2,3,4,5};
int[] arr2 = Arrays.copyOf(arr1,arr1.length);
Arrays的copyOf()方法返回的数组是新的数组对象,所以改变返回数组中元素的值不会影响原来数组中元素的值。copyOf()方法中第二个变量指定新数组的长度,如果新数组的长度超过原来数组的长度,则多出来的元素会保留数组默认值。
除了copyOf()方法外,还有copyOfRange()方法,可以指定来源数组以及要复制的索引范围:
int arr1 = {1,2,3,4,5};
int arr2 = Array.copyOfRange(arr1,1,4); // 复制索引1开始到索引4(但不包括索引4)的元素,arr2的元素会是2,3,4
Array类
Array类位于java.util包中,它提供了几个方法可以直接使用:
sort() - 对指定数组排序,使用的是快速排序法
binarySearch() - 让你对已排序的数组进行二分查找,如果找到指定的值就返回该值所在的索引,否则就返回负值
fill() - Arrays.fill()将已创建数组的默认值改为指定值
equals() - 比较两个数组中的元素值是否全相等,如果相等返回true,否则返回false
foreach与数组
在Java SE 6中, foreach的语法为:
int[] arr = {1,2,3,4,5};
for(int element : arr)
System.out.println(element);
注意, element类型必须与数组元素类型相同