【JAVA零基礎(chǔ)入門系列】Day10 Java中的數(shù)組

??什么是數(shù)組?顧名思義,就是數(shù)據(jù)的組合,把一些相同類型的數(shù)放到一組里去。

??那為什么要用數(shù)組呢?比如需要統(tǒng)計(jì)全班同學(xué)的成績(jī)的時(shí)候,如果給班上50個(gè)同學(xué)的成績(jī)信息都命名一個(gè)變量進(jìn)行存儲(chǔ),顯然不方便,而且在做成績(jī)統(tǒng)計(jì),如求總分,平均分,方差等的時(shí)候,遍歷成績(jī)信息又成了一大難題,這個(gè)時(shí)候,你就需要用到數(shù)組了。

??數(shù)組可以很好的解決這兩個(gè)問(wèn)題,數(shù)組名只有一個(gè),只需要使用數(shù)組名加下標(biāo)來(lái)訪問(wèn)各個(gè)元素的信息即可,遍歷的時(shí)候,由于下標(biāo)是連續(xù)的,所以訪問(wèn)起來(lái)十分方便。

??接下來(lái),就開(kāi)始正式介紹一下數(shù)組吧。

??數(shù)組是用于存儲(chǔ)相同數(shù)據(jù)類型的集合,使用數(shù)組前需要先聲明數(shù)組,聲明方式為:int[] a; 這里只聲明了變量,并沒(méi)有真正初始化為數(shù)組。應(yīng)該使用new運(yùn)算符創(chuàng)建數(shù)組,int[] a = new int[100]; 這里聲明了一個(gè)大小為100的整數(shù)型數(shù)組,也就是說(shuō),里面可以存放最多一百個(gè)整數(shù)。需要注意的是,數(shù)組的下標(biāo)是從0-99,而不是1-100,所以,數(shù)組里的最后一個(gè)數(shù)是a[99]而不是a[100],數(shù)組定義好之后,就可以用循環(huán)結(jié)構(gòu)來(lái)進(jìn)行賦值操作。

int[] a = new int[100];
for(int i = 0; i < 100; i++)
    a[i] = i;

??新建的數(shù)字?jǐn)?shù)組,里面元素都會(huì)被初始化為0,如果是邏輯型數(shù)組,則都會(huì)初始化為假,對(duì)象型數(shù)組則初始化為null,當(dāng)你創(chuàng)建一個(gè)字符串?dāng)?shù)組的時(shí)候,里面元素都是null而不是空字符串,所以如果希望初始化后為空串,則需要像上述操作那樣,遍歷每個(gè)元素來(lái)賦值空串。

??對(duì)于Java中的數(shù)組遍歷,還有一種更簡(jiǎn)便的方法,類似于C#中的for each循環(huán),Java也有同樣的for each操作。

for(int element:a)
    System.out.println(element);

??這段代碼會(huì)依次打印a中的元素,每個(gè)元素占一行,這里的每次循環(huán),都會(huì)將數(shù)組a中的一個(gè)元素暫存在element中,處理完之后在將下一個(gè)元素存放在element中。這樣做的好處是,省略了下標(biāo)處理,這樣就不存在下標(biāo)越界的問(wèn)題了,看起來(lái)也更加簡(jiǎn)潔。當(dāng)然,如果在循環(huán)中需要利用下標(biāo)進(jìn)行一些判斷或者處理,就只能需要使用普通的for循環(huán)來(lái)處理了。兩種方法各有優(yōu)點(diǎn),具體情況具體分析即可。

??對(duì)于數(shù)組的初始化,有幾種比較常見(jiàn)的方式。

int[] a={1,2,3,4,5};//這里不需要使用new
new int[]{2,3,4,5,6};//匿名數(shù)組
a = new int[]{2,3,4,5,6};</pre>

??如果你有學(xué)過(guò)C或者C++的話,這里的int[] a= new int[100]; 相當(dāng)于C++中的int* a = new int[100];也就是說(shuō),數(shù)組變量是一個(gè)指針,所以將一個(gè)數(shù)組變量拷貝給兩一個(gè)數(shù)組變量時(shí),它們將指向同一個(gè)數(shù)組。舉個(gè)栗子:

int[] a; int[] b = {3,4,5,6};
a = b;
a[2] = 10;
System.out.println(b[2]);

??這里將輸出10,也就是說(shuō)b指向的數(shù)組的元素被改變了。如果只想把一個(gè)數(shù)組里的元素的值拷貝到另一個(gè)數(shù)組中去的話,就要使用Arrays類的copyOf方法,這個(gè)方法有兩個(gè)參數(shù),第一個(gè)是需要拷貝的數(shù)組,第二個(gè)是需要拷貝的長(zhǎng)度。來(lái)看一個(gè)栗子:

package pers.frank.test; 
import java.util.Arrays; 
public class Test{ public static void main(String[] args) { 
        int[] a; int[] b = {3,4,5,6};
        a = Arrays.copyOf(b,8);
        a[2] = 10;
        System.out.println("==B=="); for(int i:b)
            System.out.println(i);
        System.out.println("==A=="); for(int i:a)
            System.out.println(i);
    }
}

??這樣,會(huì)循環(huán)輸出數(shù)組b和數(shù)組a的各個(gè)元素。

image

??這里我們將第二個(gè)參數(shù)設(shè)置成了8,而數(shù)組b的長(zhǎng)度只有4,那結(jié)果會(huì)怎樣呢?答案顯而易見(jiàn),會(huì)把多的長(zhǎng)度用0填充。

??在前面的栗子里,我們經(jīng)常看到Java應(yīng)用程序里帶有String[] args的main方法,這個(gè)參數(shù)表名,main方法接收一個(gè)字符串?dāng)?shù)組,也就是命令行參數(shù)。舉個(gè)栗子:

public class Test{ public static void main(String[] args) { if(args[0].equals("-h"))
            System.out.print("Hello,"); else if (args[0].equals("-g"))
            System.out.print("Goodbye,"); for(int i = 1; i < args.length; i++)
            System.out.print(" "+ args[i]);
        System.out.print("!");
    }
}

??運(yùn)行結(jié)果如下:

image

??下面再講講數(shù)組排序,Arrays類中有一個(gè)sort方法,用于給數(shù)組的元素進(jìn)行排序,使用的是快速排序算法,算是效率比較高的算法了。這里舉個(gè)栗子進(jìn)行演示。

import java.util.Arrays; 
public class Test{ public static void main(String[] args) { 
        int[] numbers = new int[10]; for(int i=0;i<10;i++){
            numbers[i] = (int)(Math.random()*10);
        }
        System.out.println("Before Sort:"); for (int j:numbers){
            System.out.println(j);
        }
        Arrays.sort(numbers);
        System.out.println("After Sort:"); for (int j:numbers){
            System.out.println(j);
        }
    }
}
image

??最后再說(shuō)說(shuō)多維數(shù)組吧,之前的數(shù)組只能算是一維數(shù)組,二維數(shù)組就像Excel的表格那樣,有著行跟列,如果有了解過(guò)矩陣的話,那對(duì)于二維數(shù)組應(yīng)該就不陌生了,在Java中聲明二維數(shù)組也很簡(jiǎn)單: int[][] number; 只比一維數(shù)組多了一對(duì)[]。同樣也需要用new來(lái)定義數(shù)組大小。當(dāng)然也可以使用類似于一維數(shù)組的初始化方法。

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

??數(shù)組元素的訪問(wèn)同樣需要使用兩個(gè)方括號(hào),如numbers[1][2],這里的值是數(shù)字6,第一個(gè)方括號(hào)里代表行號(hào),第二個(gè)方括號(hào)里代表列號(hào),所以這里就是第二行,第三列的數(shù)。如果需要遍歷二維數(shù)組的話,就需要使用兩個(gè)for循環(huán)了,

for(int i=0;i<numbers.length;i++){   for(int j=0;j<numbers[i].length;j++){
    System.out.println(numbers[i][j]);
  }
}

??至于更高維度的數(shù)組,一般不會(huì)用到,這里就不多介紹了。

??至此本篇講解完畢,歡迎大家繼續(xù)關(guān)注!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、Java 簡(jiǎn)介 Java是由Sun Microsystems公司于1995年5月推出的Java面向?qū)ο蟪绦蛟O(shè)計(jì)...
    子非魚(yú)_t_閱讀 4,564評(píng)論 1 44
  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡(jiǎn)書(shū)還為我保存起的...
    Jenaral閱讀 3,146評(píng)論 2 9
  • 在春晚前夕,傳聞許巍將登上春晚的舞臺(tái),演唱《生活不止眼前的茍且》這首歌曲。無(wú)疑這是一顆雷,這將表示搖滾樂(lè)首次登上央...
    故人從來(lái)與風(fēng)閱讀 1,015評(píng)論 0 0
  • 成都,一個(gè)來(lái)了就不想走的地方,但是,我還是走了。不過(guò),人雖然離開(kāi)了,心卻留了下來(lái)。兩年的掛職鍛煉,應(yīng)該是我...
    倪澤仁閱讀 427評(píng)論 0 1
  • java注解用來(lái)描述java代碼中的元信息,通常情況下,注解不會(huì)影響代碼執(zhí)行。 java內(nèi)置了三種編譯器指令: -...
    tender92閱讀 394評(píng)論 0 0

友情鏈接更多精彩內(nèi)容