数组的复制
1.System.arrayCopy
2.Array.copyOf
System.arrayCopy
格式:
public static void arraycopy(@NotNull Object src,//源数组名
int srcPos,//源数组起始位置
@NotNull Object dest,//目标数组
int destPos,//目标数组的起始位置
int length)//长度
int[] arr1={1,7,8,9,6,5};
int arr2[]=new int [5];
System.arraycopy(arr1,0,arr2,1,3);
System.out.println("arr1"+ Arrays.toString(arr1));
System.out.println("arr2"+Arrays.toString(arr2));
* 1.当目标数组的长度小于copy的长度?
* Exception in thread "main"
* java.lang.ArrayIndexOutOfBoundsException
*数组下标越界异常-->数组一旦创建长度不可变
* 2.当目标数组的长度大于copy的长度?
*会用默认值填充
* 3.当改变目标数组元素时,源数组会不会发生改变呢
*不会-->copy后的元素是新的内存空间,不会和原数组共用
* 4.当目标数组和原数组为同一个数组时
* 其实就是对数组的值重新覆盖了。但数组长度不会发生改变
Array.copyOf
int[] arr1={1,7,8,9,6,5};
int arr2[]=new int [5];
arr1=Arrays.copyOf(arr1,9);
System.out.println("arr1"+Arrays.toString(arr1));
-当复制长度小于原数组时截取
-当复制长度大于原数组时扩容
Arrays.copyO方法底层新建了一个数组,用System.arrayCopy
复制后返回了新数组,因此长度变了
排序
1.冒泡排序
int[] arr =new int [5];
for (int i = 0; i <arr.length ; i++) {
arr[i]=(int)(Math.random()*100);
}
System.out.println("排序前:"+Arrays.toString(arr));
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j <arr.length-i-1 ; j++) {
if(arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
System.out.println("排序后:"+Arrays.toString(arr));
作业:随机产生一个长度为20的数组(整数0-200内)
正序输出
逆序输出
不采取排序的方式找到最大值
将最大值和数组最有一个值互换
删除最后一个元素---最大值
对数组从大到小排序后打印
int[] arr1 = new int[20];
for (int i = 0; i < arr1.length; i++) {
arr1[i] = (int) (Math.random() * 200);
}
System.out.print("正序输出:");
for (int i = 0; i < arr1.length; i++) {
System.out.print(arr1[i] + " ");
}
System.out.println();
System.out.print("逆序输出:");
for (int j = arr1.length - 1; j >= 0; j--) {
System.out.print(arr1[j] + " ");
}
System.out.println();
int max=0,j=0;
for (int i = 0; i <arr1.length ; i++) {
if(max<arr1[i]){
max=arr1[i];
j=i;
}
}
System.out.println("最大值:"+max+" 下标为:"+j);
int temp;
temp=arr1[j];
arr1[j]= arr1[arr1.length-1];
arr1[arr1.length-1] = temp;
System.out.printf("将最大值和最后一个值互换后:");
System.out.println(Arrays.toString(arr1));
System.out.print("删除最后一个元素后:");
arr1= Arrays.copyOf(arr1,arr1.length-1);
System.out.println(Arrays.toString(arr1));
Arrays.sort(arr1);
System.out.print("从大到小排序:");
for (int i = arr1.length-1; i >=0 ; i--) {
System.out.print(arr1[i]+" ");
}
2万+





