Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用
一.數(shù)組的基本概念
數(shù)組是一種數(shù)據(jù)類型,用來(lái)存儲(chǔ)同一類型值的集合,它在內(nèi)存中是一段連續(xù)的空間。通過(guò)一個(gè)整形下標(biāo)(index,或者稱之為索引)可以訪問(wèn)數(shù)組中的每一個(gè)值。例如,如果a是一個(gè)整型數(shù)組,a[i]就是一個(gè)下標(biāo)為i的一個(gè)整數(shù),數(shù)組是一種引用類型。
二.數(shù)組的聲明
聲明數(shù)組變量時(shí),需要指出數(shù)組類型(數(shù)組元素類型后緊跟[])和數(shù)組變量的名字。例如聲明一個(gè)整型數(shù)組a:int[ ] a; 這并沒(méi)有給數(shù)組賦值,并沒(méi)有將數(shù)組初始化一個(gè)真正的數(shù)組。下面介紹數(shù)組的初始化。
三.數(shù)組的創(chuàng)建及初始化
1.數(shù)組的創(chuàng)建
數(shù)組的創(chuàng)建需要使用new操作符,new是用來(lái)申請(qǐng)數(shù)組空間的關(guān)鍵字,申請(qǐng)的空間在堆上。
T[ ] 數(shù)組名 = new T[N];
T:表示數(shù)組中存放元素的類型
T[ ]:表示數(shù)組的類型
N:表示數(shù)組的長(zhǎng)度
int[] array1 = new int[10]; //創(chuàng)建一個(gè)可以容納10個(gè)int類型元素的數(shù)組 double[] array2 = new double[6]; //創(chuàng)建一個(gè)可以容納6個(gè)double類型元素的數(shù)組
tip:數(shù)組長(zhǎng)度不要求是常量:new int[n] 會(huì)創(chuàng)建一個(gè)長(zhǎng)度為n的數(shù)組
一旦創(chuàng)建了數(shù)組,就不能改變它的長(zhǎng)度,如果需要擴(kuò)展數(shù)組的大小,就應(yīng)該使用另一種數(shù)據(jù)結(jié)構(gòu)------數(shù)組列表。
2.數(shù)組的初始化
數(shù)組的初始化主要分為動(dòng)態(tài)初始化和靜態(tài)初始化。
1)動(dòng)態(tài)初始化:在創(chuàng)建數(shù)組時(shí),直接指定數(shù)組中元素的個(gè)數(shù)
int[] array1 = new int[100];
2)靜態(tài)初始化:在創(chuàng)建數(shù)組時(shí)不直接指定數(shù)組元素個(gè)數(shù),而直接將具體的數(shù)據(jù)內(nèi)容進(jìn)行指定。
int[] array1 = new int[]{0,1,2,3}; double[] array2 = new double[]{1.0,2.0,3.0}; String[] array3 = new String[]{"hello","world"};
【注意事項(xiàng)】
· 靜態(tài)初始化雖然沒(méi)有指定數(shù)組的長(zhǎng)度,編譯器在編譯時(shí)根據(jù){}中元素個(gè)數(shù)確定數(shù)組長(zhǎng)度
· 靜態(tài)初始化時(shí),{}中元素類型必須與[]前數(shù)據(jù)類型相同
·靜態(tài)初始化不能和動(dòng)態(tài)初始化結(jié)合使用
int[] array = new int[10]{1,2,3,4}; //這種寫法是錯(cuò)誤的
·靜態(tài)初始化可以簡(jiǎn)寫,省去后面的new T[ ]
int[] array = {1,2,3,4,5,6};
·如果不確定數(shù)組內(nèi)容時(shí),使用動(dòng)態(tài)初始化,否則使用靜態(tài)初始化
在Java中可以允許有數(shù)組長(zhǎng)度為0的數(shù)組,一個(gè)方法的結(jié)果為數(shù)組,結(jié)果恰好為空的話,這樣的數(shù)組很有用。例:
new elementType[0] new elementType[] {} //注意長(zhǎng)度為0的數(shù)組與null不同
四.訪問(wèn)數(shù)組元素
創(chuàng)建了數(shù)組就可以往數(shù)組中填元素,例如使用一個(gè)循環(huán):
int[] a = new int[100]; for(int i=0;i<100;i++){ a[i] == i; //給數(shù)組中填充0-100 }
創(chuàng)建數(shù)組時(shí),所有元素都初始化為0。boolean數(shù)組的元素會(huì)初始化為false,對(duì)象數(shù)組的元素會(huì)初始化為一個(gè)特殊值null,表示這些元素還未存放任何對(duì)象。例:
String[] names = new String[10];
這會(huì)創(chuàng)建一個(gè)包含10個(gè)字符串長(zhǎng)度的數(shù)組,所有的字符串都為null。
警告:如果創(chuàng)建了一個(gè)長(zhǎng)度為100的數(shù)組,訪問(wèn)0-99以外的下標(biāo),例如a[100]就會(huì)引發(fā)
“array index out of bounds”異常。
想獲得數(shù)組中元素的個(gè)數(shù)可以使用array.length 例如:
for(int i=0;i<array.length;i++){ System.out.println(a[i]); }
五.for each 循環(huán)
Java中有一種循環(huán)結(jié)構(gòu)來(lái)依次處理數(shù)組中每個(gè)元素而不使用下標(biāo)。
這種增強(qiáng)的for循環(huán)的語(yǔ)句格式為:for(varible : collection) statement 例:
for(int i : array) System.out.println(i); //循環(huán)遍歷數(shù)組中的每一個(gè)元素
當(dāng)然可以使用傳統(tǒng)的循環(huán):
for(int i=0;i<array.length;i++){ System.out.println(array[i]); }
for each循環(huán)的優(yōu)點(diǎn)是顯得更加簡(jiǎn)潔,更不易出錯(cuò),因?yàn)槲覀儾槐乜紤]下標(biāo)的值。
tip:有一個(gè)更為簡(jiǎn)單方式打印數(shù)組中的每一個(gè)值,利用Arrays類的toString方法。調(diào)用Arrays.toString(a),返回一個(gè)字符串,這個(gè)字符串包含數(shù)組元素。例如:
System.out.println(Arrays.toString(a)); //返回字符串"[0,1,2,3,4]"
六.數(shù)組的拷貝
Java中將一個(gè)數(shù)組拷貝到另一個(gè)數(shù)組中這兩個(gè)數(shù)組將引用同一個(gè)數(shù)組
int[] array1 = array2; array1[3] = 5; //這時(shí)array2[3] 的值也是5
如果想將一個(gè)數(shù)組的所有值拷貝到另一個(gè)數(shù)組中要使用Arrays類的copyOf方法:
int[] array2 = Arrays.copyOf(array1,array1.length);
第二個(gè)參數(shù)是新數(shù)組的長(zhǎng)度,可以使用這個(gè)方法來(lái)增加數(shù)組的大小
array = Arrays.copyOf(array,2 * array.length);
如果數(shù)組元素是數(shù)值型,那么額外的數(shù)組元素將被賦值為0;布爾型將被賦值為false。如果長(zhǎng)度小于原始數(shù)組長(zhǎng)度則只拷貝前面的值。
七.數(shù)組排序
對(duì)數(shù)值型數(shù)組排序,使用Arrays類中的sort方法,例:
int[] array = {2,3,4,9,65,8,47}; Arrays.sort(array); for(int i : array) System.out.println(i);
通過(guò)這可以將數(shù)組進(jìn)行排序然后進(jìn)行打印出來(lái)。
八.二維數(shù)組
創(chuàng)建并初始化一個(gè)二維數(shù)組:
int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
初始化完成就可以通過(guò)array[i][j]訪問(wèn)數(shù)組元素。
for each循環(huán)不能自動(dòng)處理二維數(shù)組中的每一個(gè)元素。它會(huì)循環(huán)處理行,這些行本身就是一維數(shù)組,所以可以嵌套循環(huán)訪問(wèn)二維數(shù)組中的每一個(gè)元素
for(int[] row : array) for(int value : row) do something with value
要想快速打印一個(gè)二維數(shù)組可以調(diào)用:
System.out.println(Arrays.deepToString(array)); //輸出格式:[[1,2,3],[4,5,6],[7,8,9]]
tip:二維數(shù)組本質(zhì)上也是一維數(shù)組。
總結(jié)
到此這篇關(guān)于Java基礎(chǔ)教程之?dāng)?shù)組的定義與使用的文章就介紹到這了,更多相關(guān)Java數(shù)組定義與使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺析JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊(duì)列
架構(gòu)、分布式、日志隊(duì)列,標(biāo)題自己都看著唬人,其實(shí)就是一個(gè)日志收集的功能,只不過(guò)中間加了一個(gè)Redis做消息隊(duì)列罷了。下面通過(guò)本文給大家分享JavaWeb項(xiàng)目架構(gòu)之Redis分布式日志隊(duì)列,感興趣的朋友一起看看吧2018-01-01解決spring cloud zuul與nginx的域名轉(zhuǎn)發(fā)問(wèn)題
這篇文章主要介紹了spring cloud zuul與nginx的域名轉(zhuǎn)發(fā)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07Spring事務(wù)aftercommit原理及實(shí)踐
這篇文章主要為大家介紹了Spring事務(wù)aftercommit原理及實(shí)踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-09-09如何實(shí)用Java實(shí)現(xiàn)合并、拆分PDF文檔
這篇文章主要介紹了如何實(shí)用Java實(shí)現(xiàn)合并、拆分PDF文檔,處理PDF文檔時(shí),這樣的好處是對(duì)文檔的存儲(chǔ)、管理很方便。下面將通過(guò)Java程序代碼介紹具體的PDF合并、拆分的方法,需要的朋友可以參考下2019-07-07MyBatis動(dòng)態(tài)<if>標(biāo)簽使用避坑指南
這篇文章主要為大家介紹了MyBatis動(dòng)態(tài)<if>標(biāo)簽使用避坑指南,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03Java中使用Properties配置文件的簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于Java中使用Properties配置文件的簡(jiǎn)單方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09