数组的拷贝问题

来源:互联网 发布:seo技术培训 编辑:程序博客网 时间:2024/05/17 04:24
package com.demo;


import java.util.Arrays;
import java.util.List;


public class Array {
//拷贝一维数组
static void showArray(){
int[] a={4,3,1,10};
int[] b=new int[6];   //System.arraycopy和Arrays.copyof的区别
//前者没有返回值,目标数组没有数值的位补0
//而后者返回指定长度给目标数组,目标数组的引用指向源数组,例如:b=Arrays.copyOf(a,a.length)
System.arraycopy(a, 0, b, 0, a.length);
for (int i : b) {
System.out.print(i+" ");    //输出4 3 1 10 0 0
}
System.out.println();
}
//拷贝一维数组
static void showArray2(){
int[] a={4,3,1,10};
int[] b=new int[6];   //这里可以用更长的数组接收
b=Arrays.copyOf(a, a.length);//这里要指定成a.length,拷贝4个,如果指定成2则拷贝前两个
//如果指定成b.length就会输出4 3 1 10 0 0会有两位0
for (int i : b) {
System.out.print(i+" ");  //输出4 3 1 10
}
System.out.println();
System.out.println(b.length);  //输出 4   代表长度从6变成了4吗?
//首先,数组长度是不可变的。b都是引用变量,拷贝结果数组赋给了b,b指向了数组,所以长度是数组的长度。
}
//拷贝二维数组
static void showMutArr(){
int[][] a= new int[][]{{1,2},{3,1,4},{5,3,1,1}};
int[][] b= new int[a.length][];
for(int i=0;i<a.length;i++){
b[i]=new int[a[i].length]; //关键步骤,申请b[i]行的列空间
//(源数组,始位置,目标数组,始位置,长度)
System.arraycopy(a[i],0, b[i], 0,a[i].length );
}
System.out.println(Arrays.deepToString(b));
}
//拷贝二维数组
static void showMutArr2(){
int[][] a= new int[][]{{1,2},{3,1,4},{5,3,1,1}};
int[][] b= new int[a.length][];
for(int i=0;i<a.length;i++){
b[i]=new int[a[i].length]; //关键步骤,申请b[i]行的列空间
//(源数组,始位置,目标数组,始位置,长度)
b[i]=Arrays.copyOf(a[i], a.length);
}
System.out.println(Arrays.deepToString(b));
//如果(b[1],3)就会返回-3,为什么?(b[2],1)会返回-1,为什么?
System.out.println(Arrays.binarySearch(b[1],3));
}
static void arrCopy(){
int [] scores = new int[]{12,41,26,42,22};//直接初始化数组对象scores的初始值
int [] arrClone = new int[scores.length];
int [] arrTarget = new int[3];
System.arraycopy(scores, 0, arrClone, 2, 3);//使用System.arrayCopy方式进行数组拷贝
// for (int i : arrClone) {
// System.out.println(i);
// }
arrTarget=Arrays.copyOf(scores, scores.length+2);
for (int j : arrTarget) {
System.out.println(j);  //输出 12 41 26 42 22 0 0   总共7位数字,困惑吧?因为Arrays.copyOf返回的是一个长度为7的新数组
}
}
//对数组降序排列
static void desc(int[] arr){
Arrays.sort(arr);
for (int i = 0, j=arr.length-1; i < arr.length/2; i++,j--) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
String s = Arrays.toString(arr);
System.out.println(s);
}
//对数组对象中的元素进行换位
static void swap(int[]arr,int x,int y){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
//查找最大值

//查找二维数组每一行的最大值放到一个数组中去
static void findm(int[][]b){
int[]c=new int[b.length];
for(int i=0;i<b.length;i++){
Arrays.sort(b[i]);
c[i]=b[i][b[i].length-1];
}
System.out.println(Arrays.toString(c));
}

public static void main(String[] args) {
int[] a ={22,33,44,12,23,133,4,2,66,9};
int[][] b={
{2,8,6},{22,11,33},{55,44,77}
};
// showArray();
// showArray2();
// showMutArr2();
// arrCopy();
// desc(a);
// swap(a,1,2);
// System.out.println(Arrays.toString(a));
findm(b);




//String和String[]作为泛型的时候没有区别。
// String[] str="aaa,sss,ddd".split(",");
// String[] str={"aaa","sss"};
// List<String> asList = Arrays.asList(str);
// for (String string : asList) {
// System.out.println(string);
// }

// int[] aaa={22,33,44};
// List<int[]> asList=Arrays.asList(aaa);
// for (int[] i : asList) {
// for (int j : i) {
// System.out.println(j);
// }
// }

// int[] a1={77,66,24,33,45,59};
// Arrays.sort(a1);  //返回空
// System.out.println(Arrays.toString(a1));

// int[] a={22,33,44};
// int[] b={22,33,44};
// boolean c=Arrays.equals(a, b);


// int b =Arrays.hashCode(a);
// String s=Arrays.toString(a);
}
}