4、数组的基本操作
1、遍历数组
遍历数组就是获取数组中的每个元素。通常遍历数组都使用for循环来实现。
遍历一维数组很简单,遍历二维数组需要使用双层for循环,通过数组的length属性可获得数组的长度。
在遍历数组时,使用foreach语句可能更简单。
代码演示:
package com.company.day8;
public class day82 {
public static void main(String[] args){
int[][] a = new int[][]{{1,2,3,4},{5,6,7,8},{9,6,3,0}};
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt);
System.out.print(" ");
}
System.out.println();
}
}
}
结果:
2、填充替换数组元素
数组中的元素定义完成后,可通过Arrays类的静态方法fill()来对数组中的元素进行替换。该方法通过各种重载形式可完成对任意类型的数组元素进行替换。
fill()方法有两种参数类型,下面以int型数组为例介绍fill()方法的使用方法。
(1)fill (int [] a,int value)
a:要进行元素替换的数组
value:要存储数组中所有元素的值。
(2)fill (int [] a,int fromIndex,int toIndex,int value)
a:要进行填充的数组
fromIndex:要使用指定值填充的第一个元素的索引(包括)。
toIndex:要使用指定值填充的最后一个元素的索引(不包括)。
value:要存储在数组所有元素中的值。
注意:如果指定的索引位置大于或等于要进行填充的数组的长度,则会报出ArrayIndexOutOfBoundsException异常。(数组越界异常)
代码演示:
package com.company.day8;
import java.util.Arrays;
public class day82 {
public static void main(String[] args){
System.out.println("原数组a:");
int[][] a = new int[][]{{1,2,3,4},{5,6,7,8},{9,6,3,0}};
for (int[] ints : a) {
for (int anInt : ints) {
System.out.print(anInt);
System.out.print(" ");
}
System.out.println();
}
System.out.println("1,被替换后的数组a");
Arrays.fill(a[0],2);
Arrays.fill(a[1],2);
Arrays.fill(a[2],2);
for (int[] ints : a){
for(int anInt : ints){
System.out.print(anInt);
System.out.print(" ");
}
System.out.println();
}
System.out.println("2,被替换后的数组a");
Arrays.fill(a[0],0,3,4);
Arrays.fill(a[1],2,4,6);
Arrays.fill(a[2],1,3,9);
for (int[] ints : a){
for(int anInt : ints){
System.out.print(anInt);
System.out.print(" ");
}
System.out.println();
}
}
}
结果:
注意:fill()方法只可对一维数组操作,面对高维数组,需要分段操作。
3、对数组进行排序
通过Arrays类的静态sort()方法可以实现对数组的排序。
sort()方法提供了多种重载形式,可对任意类型的数组进行升序排序。
语法如下:
Arrays.sort(object)
object:进行排序的数组名称。
代码演示:
package com.company.day8;
import java.util.Arrays;
public class day83 {
public static void main(String[] args){
int[] a = new int[]{99,33,55,12,45,66,78};
Arrays.sort(a);
for(int x : a){
System.out.println(x);
}
}
}
结果:
注意:sort()方法只可对一维数组进行操作,面对高维数组,只能在一维数组范围操作
4、复制数组
Arrays类的copyOf()方法与copyOfRange()方法可以实现对数组的复制。
copyOf()方法是复制数组至指定长度,copyOfRange()方法则将指定数组的指定长度复制到一个新数组中。
- copyOf()方法
该方法提供了多种重载形式,用于满足不同类型数组的复制。
语法如下:
copyOf(arr,newlength)
arr:要进行复制的数组。
newlength:int型常量,指复制后的新数组的长度。如果新数组的长度大于数组arr的长度,则用0填充(根据复制数组的类型决定填充的值。整型数组填充0,char型数组填充null);如果复制后的新数组的长度小于arr数组的长度,则会从数组arr的第一个元素开始截取至满足新数组长度为止。 - copyOfRange()方法
该方法同样提供了多种重载形式。
语法如下:
copyOfRange(arr,int fromIndex,int toIndex)
arr:要进行复制的数组。
fromIndex:指定开始复制数组的索引位置。fromIndex必须在0至整个数组的长度之间。新数组包括索引是fromIndex的元素。
toIndex:要复制范围的最后索引位置。可大于arr数组的长度。新数组不包括索引是toIndex的元素。
代码演示:
package com.company.day8;
import java.util.Arrays;
public class day84 {
public static void main(String[] args){
int[] arr = new int[]{23,13,14};
System.out.println("1.copyOf()--------");
int[] arr1 = Arrays.copyOf(arr,5);
for (int x : arr1){
System.out.print(x);
System.out.print(" ");
}
System.out.println();
System.out.println("2.copyOfRange()---------");
int[] arr2 = Arrays.copyOfRange(arr,0,2);
for (int x:arr2){
System.out.print(x);
System.out.print(" ");
}
}
}
结果:
5、数组查询
Arrays类的binarySearch()方法,可以用二分搜索法来搜索指定数组,以获得指定对象。
该方法返回要搜索元素的索引值。
binarySearch()方法提供了多种重载形式,用于满足各种类型数组的查找需求。
binarySearch()方法有两种参数类型。
- binarySearch(Object[],Object key)
语法如下:
binarySearch(Object[] a,Object key)
a:要搜索的数组。
key:要搜索的值。
如果key包含在数组中,则返回搜索值的索引;否则返回-1或“-”(插入点)。插入点是搜索键将要插入数组的那一点,即第一个大于此键的元素索引。
注意:必须在调用之前对数组进行排序(sort()方法)。如果没有对数组进行排序,则结果是不确定的,如果数组包含多个带有指定值的元素,则无法保证找到的是哪一个。 - binarySearch(Object[],int fromIndex,int toIndex,Object key)
该方法在指定的范围内检索某一元素。
语法如下:
binarySearch(Object[] a,int fromIndex,int toIndex,Object key)
a:要搜索的数组。
fromIndex:指定范围的开始处索引(包含)。
toIndex:指定范围的结束处索引(不包含)。
key:要搜索的值。
必须在调用之前对数组进行排序,来获取准确的索引值。如果key包含在数组中,则返回搜索值的索引;否则返回-1或“-”(插入点)。如果范围中的所有元素都小于指定的键,则为toIndex(注意,这保证了当且仅当此键被找到时,返回值将大于等于0)。
注意:如果指定的范围大于或等于数组的长度则会报出ArrayIndexOutOfBoundsException异常。(数组越界异常)
代码演示:
package com.company.day8;
import java.util.Arrays;
public class day85 {
public static void main(String[] args){
System.out.println("1.binarySearch(Object[],Object key)--------------");
int[] a = new int[]{1,8,9,4,5};
Arrays.sort(a);
int index1 = Arrays.binarySearch(a,5);
System.out.println("5的索引位置是:"+index1);
System.out.println("2. binarySearch(Object[],int fromIndex,int toIndex,Object key)--------");
String[] str = new String[]{"ab","zy","cd","ef","gh","ik"};
Arrays.sort(str);
int index2 = Arrays.binarySearch(str,1,4,"ef");
System.out.println("ef的索引位置是:"+index2);
}
}
结果: