Java数组的基本操作

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异常。


猜你喜欢

转载自blog.csdn.net/a15028596338/article/details/82584687
今日推荐