數組的拷貝問題

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);
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章