1. 程式人生 > >java 陣列 、 for each迴圈, 陣列的兩種拷貝方法 ,Arrays.copyOf(),Arrays.toString[],匿名陣列

java 陣列 、 for each迴圈, 陣列的兩種拷貝方法 ,Arrays.copyOf(),Arrays.toString[],匿名陣列

陣列是一種資料結構,陣列不一定裡面是數,也可以是char,String,boolean,int,double
陣列通過一個整型下標可以訪問陣列中每一個值。例如a是一個整形陣列,則a[i]就是陣列中下標為i的整數。
在宣告(區別於建立)陣列時,需要指出陣列型別(資料元素型別[ ]+陣列變數名字)
int[ ] a; //只是聲明瞭陣列變數a,而沒有建立陣列a
應該使用new運算子建立陣列:
int[] a=new int[100]; //建立了int型的陣列a,並將陣列元素都初始化為0
陣列長度不要求是常量,可以為int[] a=new int[n];

package 第3章;

public
class 第3章a { public static void main(String[] args) { int[] b=new int[10]; int i; for(i=0;i<10;++i) { b[i]=i; } for(i=9;i>=0;--i) { System.out.println(b[i]); } } }

建立一個數字陣列時,所有元素都初始化為0,boolean陣列的元素會初始化為false,物件陣列的元素則初始化為null,這表示這些元素還未存放任何物件。

 String[] name=new String[10];   //此時10個字串全部為null

如果希望這個陣列包含空串,可以為元素制定空串(空串“”與null串是不一樣的值)

package 第3章;

public class 第3章a
{
    public static void main(String[] args)
    {
        String[] name=new String[10];   //此時10的元素全部為null
        String[] name2=new String[10];
        for(int i=0;i<10;++i)
        {
            name[i]=null
; name2[i]=""; } for(int i=0;i<10;++i) { System.out.println(name[i]); System.out.println(name2[i]); } } }

要想獲得陣列中的元素個數,可以使用array.length(陣列名.length)而不是 陣列名.length();
陣列名.length 適用於任何型別的陣列(String,boolean……)

package 第3章;
public class 第3章a
{
    public static void main(String[] args)
    {
        String[] name=new String[10];   //此時10的元素全部為null
        int c=name.length;
        //不是 int c=name.length();
        System.out.println(c);
    }          
}

一旦建立了陣列,就不能在改變它的大小(儘管可以改變每一個數組元素),如果經常需要在執行過程中擴充套件陣列的大小,就應該使用另一種資料結構–陣列列表(array list)
for each 迴圈
Java有一種功能很強的迴圈結構,可以用來依次處理陣列中的每個元素,而不必為下標值而分心。

for(變數 :陣列名)
{

}
//例如:
package 第3章;
import java.util.Arrays;
public class 第3章a
{
    public static void main(String[] args)
    {
        int[] a=new int[2];
        int i=1;
        a[0]=1;
        a[1]=3;
        for(int element:a)
        {
          //  System.out.println(element);
           System.out.println(element);
        }
        System.out.println(Arrays.toString(a));
    }          
}

for(int element:a)
{
System.out.println(element);
}
列印陣列a的每一個元素,一個元素佔一行
這個迴圈應讀作:迴圈a中的每一個元素(for each element in a)
使用for each語句顯得更加簡潔,更不易出錯
for each 迴圈語句的迴圈變數element將遍歷陣列中的每一個元素

package 第3章;
import java.util.Arrays;
public class 第3章a
{
    public static void main(String[] args)
    {
        int[] a=new int[2];

        int i=1;
        a[0]=1;
        a[1]=3;

        System.out.println(Arrays.toString(a));

    }          
}

有個更加簡潔的方式列印陣列中的所有值,即利用Arrays類的toString方法,
import java.util.Arrays ;
呼叫Arrays.toString(a)方法,返回一個包含陣列元素的字串,這些元素被放置在中括號內,元素之間以逗號分隔,例如:“[1,2,3,4,5]”
要想列印陣列,可以呼叫
System.out.println(Arrays.toString(a));

package 第3章;
import java.util.*;
public class 第3章a
{
    public static void main(String[] args)
    {
       int[] a=new int[5];
       for(int i=0;i<5;++i)
       {
           a[i]=i;
       }
       System.out.println(Arrays.toString(a));
    }          
}
package 第3章;
import java.util.*;
public class 第3章a
{
    public static void main(String[] args)
    {
       int[] a=new int[5];
       for(int element:a)
       {
           System.out.println(element);
       }

    }          
}

陣列初始化以及匿名陣列
在java中,提供了一種建立陣列物件同時賦予初始值的簡化書寫形式:
int [] hello={1,2,3,4,5};
請注意,在使用這種語句時,不需要呼叫new:
int [] hello=new int[5];
甚至還可以初始化一個匿名的陣列:
new int [] {1,2,3,4,5,6,7}; //可以用來重新初始化一個已有的陣列:
hello=new int[] {1,2,3,4,5,6,7};
以上為下列語句的簡寫:
int[] annoymous={1,2,3,4,5,6,7};
hello=annoymous ;

 package 第3章;
import java.util.*;
public class 第3章a
{
    public static void main(String[] args)
    {
       int[] hello=new int[3];
       hello=new int[] {1,2,3};
       for(int element:hello)
       {
           System.out.println(element);
       }
       System.out.println(Arrays.toString(hello));
    }          
}

在java中,允許陣列的長度為0,在編寫一個結果維陣列的方法時,如果碰巧結果為空,則這種語法形式就顯得非常有用,此時可以建立一個長度為0的陣列:

int[] well=new int[0];

在java中,允許將一個數組變數拷貝給另一個數組變數,這時,兩個變數引用同一個陣列。
如同兩個指標指向同一個陣列
int [] hello=new int [5];
int [] well=hello;

//例如:
package 第3章;
import java.util.*;
public class 第3章a
{
    public static void main(String[] args)
    {
       int[] hello=new int[3];
       hello[0]=1;
       hello[1]=3;
       hello[2]=0;
       int [] well=hello;
       System.out.println(Arrays.toString(well));
       //兩個陣列變數指向同一個陣列
       //如果希望將一個數組的所有制拷貝到另一個新的陣列中,就要使用Arrays類的copyOf方法
       int[] what=Arrays.copyOf(well, well.length);
       int[] how=Arrays.copyOf(hello, 2*hello.length);
       System.out.println("what= "+Arrays.toString(what));
       System.out.println("how= "+Arrays.toString(how));
       char[] a=new char[3];
       boolean[] b=new boolean[3];
       String[] c=new String[3];
       char[] A=Arrays.copyOf(a, a.length);
       boolean[] B=Arrays.copyOf(b, b.length);
       String[] C=Arrays.copyOf(c, c.length);
       System.out.println("A= "+Arrays.toString(A));
       System.out.println("B= "+Arrays.toString(B));
       System.out.println("C= "+Arrays.toString(C));

       //Arrays.copyOf(陣列名,拷貝而成的陣列的長度);
       //數值型(int,long,double)多餘的元素賦值為0,布林型boolean,多餘元素賦值為false,如果長度小於原陣列長度,則只拷貝最前面的陣列元素。
       //JAVA中的陣列語句:int[] hello=new int[5];   等同於int *hello=new int[5];
       //JAVA中的[]運算子被預定義為檢查陣列邊界,而且java沒有指標運算,既不能通過hello+1來得到陣列的下一個元素。
    }          
}
run:
[1, 3, 0]
what= [1, 3, 0]
how= [1, 3, 0, 0, 0, 0]
A= [, , ]
B= [false, false, false]
C= [null, null, null]

char[] A;
A 為空時,A= [ , , ];
boolean[] B;
B為空時,B= [false, false, false];
String[] C;
C為空時,C= [null, null, null]