java.util包的Arrays类里面包含了用来操作数组(如排序和搜索)的各种方法。
遍历数组
遍历数组就是获取数组中的每一个元素。通常遍历数组可以使用for循环。
遍历二维数组需要使用双层for循环,通过数组的length属性可以获得数组的长度。
//二维数组的遍历
public class Trap {
public static void main(String[] args) {
int b[][]=new int[][] {{1},{2,3},{4,5,6}};
for(int i=0;i<b.length;i++)
{
for(int j=0;j<b[i].length;j++)
{
System.out.print(b[i][j]);
}
System.out.println();
}
}
}
在遍历数组时,使用foreach语句可能会更简单。
public static void main(String[] args) {
int arr[][]= {{1,2},{3,4}};
int i=0;
for (int[] a : arr) {
i++;
int j=0;
for (int b : a) {
j++;
if(i==arr.length&&j==a.length){
System.out.print(b);
}else {
System.out.print(b+"、");
}
}
}
}
填充替换数组元素
数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素的替换。fill()方法有两种参数类型。
1、fill(int[ ]a,int value)
该方法可将指定的int值分配给int型数组的每一个元素。
public static void main(String[] args) {
int[]arr=new int[5];
Arrays.fill(arr, 6);
for (int i = 0; i < arr.length; i++) {
System.out.println("第"+i+"个元素是:"+arr[i]);
}
}
2、fill(int []a, int fromIndex, int toIndex, int val);
该方法将指定的int值分配给int型数组指定范围中的每个元素。填充的范围从索引fromIndex(包括)一直到索引toIndex(不包括)。如果fromIndex==toIndex,则填充范围为空。
public static void main(String[] args) {
int arr[]=new int[]{1,2,3,4};
Arrays.fill(arr, 1, 2, 5);
for (int i = 0; i < arr.length; i++) {
System.out.println("第"+i+"个元素是"+arr[i]);
}
}
如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException(数组越界异常)异常。
对数组进行排序
通过Arrays类的静态sort()方法可以实现对数组的排序。sort方法提供了多种重载形式,可对任意类型的数组进行升序排序。
Arrays.sort(object);
public static void main(String[] args) {
int arr[]=new int[] {1,5,3,9,8};
Arrays.sort(arr);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
复制数组
Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制。
copyOf()方法是复制数组至指定长度。copyOfRange()方法是将指定数组的指定长度复制到一个新数组中。
1、copyOf()方法
该方法提供了多种重载形式,用于满足不同类型数组的复制。
语法如下:
copyOf(arr,int newlength)
public static void main(String[] args) {
int arr[]=new int[] {1,2,3};
int newArr[]=Arrays.copyOf(arr, 5);
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
运行结果如图:
2、copyOfRange()方法
该方法同样提供了多种重载形式。
语法如下:
copyOfRange(arr, int from, int to);
public static void main(String[] args) {
int arr[]=new int[] {1,2,3,4,5,6};
int newArr[]=Arrays.copyOfRange(arr, 0, 3);
for (int i = 0; i < newArr.length; i++) {
System.out.println(newArr[i]);
}
}
运行结果如下:
数组查询
Arrays类的binarySearch()方法,可使用二分搜索法来搜索指定数组 ,以获得指定对象。该方法返回要搜索元素的索引值。binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需要。binarySearch()方法有两种参数类型。
1、binarySearch(Object [ ],Object key)
public static void main(String[] args) {
int arr[]=new int[] {4,25,10};
Arrays.sort(arr);
int index=Arrays.binarySearch(arr, 0,1,8);
System.out.println(index);
}
运行结果如下:
上面的代码中变量index的值是元素8在数组arr中索引在0~1内的索引位置。由于在指定的范围内并不存在元素8,index的值是“-”(插入点)。如果对数组进行排序,元素8应该在25的前面,因此插入点应是元素25的索引值2,所以index的值是-2。
如果数组中的所有元素都小于指定的键,则为arr.length。
public static void main(String[] args) {
int arr[]=new int[] {4,25,10};
Arrays.sort(arr);
int index=Arrays.binarySearch(arr,80);
System.out.println(index);
}//输出结果为-4
必须在进行此调用之前对数组进行排序(通过sort()方法)。如果没有对数组进行排序,则结果是不确定的。如果数组包含多个带有指定索引值的元素,则无法保证找到的是哪一个。
2、binarySearch(Object [ ],int fromIndex,int toIndex,Object key)
该方法在指定的范围内检索某一元素。
public static void main(String[] args) {
String str[]=new String[] {"ab","cd","ef","yz"};
Arrays.sort(str);
int index=Arrays.binarySearch(str, "cd");
System.out.println("cd的索引位置是:"+index);
}
运行结果:
在使用此方法之前同样对数组进行排序,来获取准确的索引值。如果要搜索的元素key在指定的范围内,则返回搜索键的索引;否则返回-1或“-”(插入点)。如果范围中的所有元素都小于指定的键,则为toIndex。
如果指定的范围大于或等于数组的长度,则会报出ArrayIndexOutOfBoundsException异常。