1. 程式人生 > >java數組基礎

java數組基礎

outer use focus table length flow splay adjust mos

java中的數組是引用數據類型。

//在棧空間聲明數組引用對象
int[] NAME;
int NAME[];    //中括號放哪邊都是等價的
className[] NAME;

//在堆空間劃分數組空間並初始化數組對象
NAME = new int[3];
NAME = new className[3]

//賦值,在堆空間中填充每個數組成員
NAME[0]=0;NAME[1]=1;...
className[0]=...

//聲明數組時直接賦值
int[] NAME = {1,2,3};
className[] NAME = {new className(1),new className(2
),...};

根據數據類型可分為兩種類型:

  • (1).基礎數據類型的數組。只是數組內的數據類型是基礎的,數組本身仍然是引用類型,畢竟數組有兩段內存空間(棧中引用變量,堆中數組對象)。
    例如:int[] a = new int[3];表示數組中有三個成員:a[0]、a[1]和a[2]。
  • (2).引用數據類型的數組。例如有一個date類,則可以date[] d = new date[3];,表示數組中有3個成員date[0]、date[1]和date[2],但每個date[*]成員自身又是一個引用對象,繼續引用實際的date對象。具體的見下文。

註意,在劃分數組空間時的array[N]中,N表示的是N個對應數據類型的成員

。如果是基礎數據類型的數組,則N就是N個基礎數據的值,例如int[3]可以是{1,2,3}、{5,6,7}。如果是引用數據類型的數組,則N就是N個引用對象。

以下分別是基礎數據類型的數組、引用類型的數組的聲明、劃分空間初始化和賦值填充的代碼示例。

class Date {
    int year,month,day;
    Date(int y,int m,int d) {
        year = y;month = m;day = d;
    }
}

public class Test {
    public static void main(String[] args) {
        //
        int a1[];
        a1 = new int[3];
        a1[0]=3;a1[1]=9;a1[2]=10;
        //
        int[] a2 = new int[3];
        a2[0]=3;a2[1]=9;a2[2]=10;
        //
        int[] a3 = {3,9,10}

        //
        Date[] days1;
        days1 = new Date[3];
        days1[0] =  new Date(2012,3,5);
        days1[1] =  new Date(2013,4,5);
        days1[2] =  new Date(2014,5,5);
        //
        Date[] days2 = new Date[3];
        ...
        //
        Date[] day3 = (new Date(2012,3,5),new Date(2013,4,5),new Date(2014,5,5));
    }
}

技術分享圖片

二維數組

java中的多維數組可以看作是數組的數組。例如二維數組int a[][]。聲明時必須先聲明左邊的,再聲明右邊的,因為數組的數組代表沒有左邊的就沒有右邊的。

int a[][] = {{1,2},{3,4,5,6},{7,8,9}};
int[][] a = {{1,2},{3,4,5,6},{7,8,9}};

int a[][] = new int[3][];
a[0] = new int[2];
a[1] = new int[4];
a[2] = new int[3];
a[0][0] = 1;a[0][1] = 2;
int t1[][] = new int[][4];  //錯誤

技術分享圖片

遍歷數組

遍歷一維數組arr[]:

for (int i = 0 ;i<arr.length;i++) {}

for (int i:arr) {}

遍歷二維數組arr[][]:

for (int i=0;i<arr.length;i++) {
    for (int j=0;j<arr[i].length;j++) {}
}

for (int i[]:arr) {
    for (int j:i) {}
}

註意,使用foreach遍歷方式時,type s:array的type和array的type必須能夠兼容,此處的s就代表各個數組成員的值。

例如:

String s[] = {"Microsoft","IBM","Apple","Oracle","AliBaBa"}
for (String x:s) {           // type = String
    System.out.println(x);   // s = "Microsoft","IBM","Apple","Oracle","AliBaBa"
}

對於不想遍歷而是只想輸出數組的全部元素值,可以采用java.util.Arrays類的toString()方法。

Integer[] nums = {1,2,3,4};
System.out.println(Arrays.toString(nums)); // return: [1, 2, 3, 4]

拷貝數組

java.lang.System類中的arraycopy()方法,因為數組在內存中是連續的,所以可以直接拷貝內存實現數組成員的拷貝。

System.arraycopy(src,src_start_pos,dest,dest_start_pos,length)

表示將src數組從src_start_pos位置開始復制,總共復制length個成員到dest數組中的第dest_start_pos處。註意可能會數組下標越界。

String s[] = {"Microsoft","IBM","Apple","Oracle","AliBaBa"}
String sbak[] = new String[6];
System.arraycopy(s,0,sbak,0,s.length)

但System.arraycopy()只支持同數據類型的數組進行copy,例如無法將int[] copy 到String[]中。此時只能使用遍歷copy的方式一個元素一個元素地copy。

import java.util.Arrays;
int[] nums = {1,2,3,4};
String[]  snums = new String[nums.length];
for (int i=0;i<nums.length;i++) {
    snums[i] = Integer.valueOf(nums[i]).toString();
}
System.out.println(Arrays.toString(snums));

main(String[] args)

public static void main(String[] args) {}的main()方法中,參數為數組類型,數組名為args。參數的內容是java命令行傳遞的各個值。

既然args是數組名,所以也可以使用其他字符替換args。因為是數組,所以數組的一些特性就可以使用,例如arg[0]、arg[1]、args.length等。

例如:

public class TestArray {
    public static void main(String [] args) {
        System.out.println(args[0] + "-" + args[1] + "-" + args[2]);
    }
}

執行時,傳遞參數1、2、3.

java Test 1 2 3
執行結果:
1-2-3

註:若您覺得這篇文章還不錯請點擊右下角推薦,您的支持能激發作者更大的寫作熱情,非常感謝!

java數組基礎