這篇文章主要介紹“怎么使用Java數(shù)組”,在日常操作中,相信很多人在怎么使用Java數(shù)組問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”怎么使用Java數(shù)組”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!
01、什么是數(shù)組
按照 Javadoc 給出的解釋?zhuān)瑪?shù)組是一個(gè)對(duì)象,它包含了一組固定數(shù)量的元素,并且這些元素的類(lèi)型是相同的。數(shù)組會(huì)按照索引的方式將元素放在指定的位置上,意味著我們可以通過(guò)索引來(lái)訪問(wèn)到這些元素。在 Java 中,索引是從 0 開(kāi)始的。
我們可以將數(shù)組理解為一個(gè)個(gè)整齊排列的單元格,每個(gè)單元格里面存放著一個(gè)元素。
數(shù)組元素的類(lèi)型可以是基本數(shù)據(jù)類(lèi)型(比如說(shuō) int、double),也可以是引用數(shù)據(jù)類(lèi)型(比如說(shuō) String),包括自定義類(lèi)型的對(duì)象。
了解了數(shù)組的定義后,讓我們來(lái)深入地研究一下數(shù)組的用法。
在 Java 中,數(shù)組的聲明方式有兩種。
先來(lái)看第一種:
int[] anArray;
再來(lái)看第二種:
int anOtherArray[];
不同之處就在于中括號(hào)的位置,是緊跟類(lèi)型,還是放在變量名的后面。前者比后者的使用頻率更高一些。
接下來(lái)就該看看怎么初始化數(shù)組了,同樣有多種方式可以初始化數(shù)組,比如說(shuō)最常見(jiàn)的是:
int[] anArray = new int[10];
使用了 new 關(guān)鍵字,對(duì)吧?這就意味著數(shù)組的確是一個(gè)對(duì)象。然后,在方括號(hào)中指定了數(shù)組的長(zhǎng)度,這是必須的。
這時(shí)候,數(shù)組中的每個(gè)元素都會(huì)被初始化為默認(rèn)值,int 類(lèi)型的就為 0,Object 類(lèi)型的就為 null。
另外,還可以使用大括號(hào)的方式,直接初始化數(shù)組中的元素:
int anOtherArray[] = new int[] {1, 2, 3, 4, 5};
這時(shí)候,數(shù)組的元素分別是 1、2、3、4、5,索引依次是 0、1、2、3、4。
02、訪問(wèn)數(shù)組
前面提到過(guò),可以通過(guò)索引來(lái)訪問(wèn)數(shù)組的元素,就像下面這樣:
anArray[0] = 10; System.out.println(anArray[0]);
通過(guò)數(shù)組的變量名,加上中括號(hào),加上元素的索引,就可以訪問(wèn)到數(shù)組,通過(guò)“=”操作符進(jìn)行賦值。
如果索引的值超出了數(shù)組的界限,就會(huì)拋出 ArrayIndexOutOfBoundException,關(guān)于這方面的知識(shí),我之前特意寫(xiě)過(guò)一篇文章,如果你感興趣的話,可以跳轉(zhuǎn)過(guò)去看看。
為什么會(huì)發(fā)生ArrayIndexOutOfBoundsException
我覺(jué)得原因挺有意思的。
既然數(shù)組的索引是從 0 開(kāi)始,那就是到數(shù)組的 length - 1 結(jié)束,不要使用超出這個(gè)范圍內(nèi)的索引訪問(wèn)數(shù)組,就不會(huì)拋出數(shù)組越界的異常了。
03、遍歷數(shù)組
當(dāng)數(shù)組的元素非常多的時(shí)候,逐個(gè)訪問(wèn)數(shù)組就太辛苦了,所以需要通過(guò)遍歷的方式。
第一種,使用 for 循環(huán):
int anOtherArray[] = new int[] {1, 2, 3, 4, 5}; for (int i = 0; i < anOtherArray.length; i++) { System.out.println(anOtherArray[i]); }
通過(guò) length 屬性獲取到數(shù)組的長(zhǎng)度,然后索引從 0 開(kāi)始遍歷,就得到了數(shù)組的所有元素。
第二種,使用 for-each 循環(huán):
for (int element : anOtherArray) { System.out.println(element); }
如果不需要關(guān)心索引的話(意味著不需要修改數(shù)組的某個(gè)元素),使用 for-each 遍歷更簡(jiǎn)潔一些。當(dāng)然,也可以使用 while 和 do-while 循環(huán)。
04、可變參數(shù)
可變參數(shù)用于將任意數(shù)量的參數(shù)傳遞給方法:
void varargsMethod(String... varargs) {}
varargsMethod() 方法可以傳遞任意數(shù)量的字符串參數(shù),可以是 0 個(gè)或者 N 個(gè),本質(zhì)上,可變參數(shù)就是通過(guò)數(shù)組實(shí)現(xiàn)的,為了證明這一點(diǎn),我們可以通過(guò) jad 反編譯一下字節(jié)碼:
public class VarargsDemo { public VarargsDemo() { } transient void varargsMethod(String as[]) { } }
所以我們其實(shí)可以直接將數(shù)組作為參數(shù)傳遞給可變參數(shù)的方法:
VarargsDemo demo = new VarargsDemo(); String[] anArray = new String[] {"沉默王二", "一枚有趣的程序員"}; demo.varargsMethod(anArray);
也可以直接傳遞多個(gè)字符串,通過(guò)逗號(hào)隔開(kāi)的方式:
demo.varargsMethod("沉默王二", "一枚有趣的程序員");
05、把數(shù)組轉(zhuǎn)成 List
List 封裝了很多常用的方法,方便我們對(duì)集合進(jìn)行一些操作,而如果直接操作數(shù)組的話,多有不便,因此有時(shí)候我們需要把數(shù)組轉(zhuǎn)成 List。
比較原始的方式,就是通過(guò)遍歷數(shù)組的方式,一個(gè)個(gè)將數(shù)組添加到 List 中。
int[] anArray = new int[] {1, 2, 3, 4, 5}; List aList = new ArrayList<>(); for (int element : anArray) { aList.add(element); }
更優(yōu)雅的方式是通過(guò) Arrays 類(lèi)的 asList() 方法:
List aList = Arrays.asList(anArray);
但需要注意的是,該方法返回的 ArrayList 并不是 java.util.ArrayList,它其實(shí)是 Arrays 類(lèi)的一個(gè)內(nèi)部類(lèi):
private static class ArrayList extends AbstractList implements RandomAccess, java.io.Serializable{}
如果需要添加元素或者刪除元素的話,最好把它轉(zhuǎn)成 java.util.ArrayList。
new ArrayList<>(Arrays.asList(anArray));
06、把數(shù)組轉(zhuǎn)成 Stream
Java 8 新增了 Stream 流的概念,這就意味著我們也可以將數(shù)組轉(zhuǎn)成 Stream 進(jìn)行操作,而不是 List。
String[] anArray = new String[] {"沉默王二", "一枚有趣的程序員", "好好珍重他"}; Stream aStream = Arrays.stream(anArray);
也可以直接對(duì)數(shù)組的元素進(jìn)行剪輯,通過(guò)指定索引的方式:
Stream anotherStream = Arrays.stream(anArray, 1, 3);
結(jié)果包含"一枚有趣的程序員"和"好好珍重他",1 這個(gè)索引位置包括,3 這個(gè)索引位置不包括。
07、數(shù)組排序
Arrays 類(lèi)提供了一個(gè) sort() 方法,可以對(duì)數(shù)組進(jìn)行排序。
基本數(shù)據(jù)類(lèi)型按照升序排列
實(shí)現(xiàn)了 Comparable 接口的對(duì)象按照 compareTo() 的排序
來(lái)看第一個(gè)例子:
int[] anArray = new int[] {5, 2, 1, 4, 8}; Arrays.sort(anArray);
排序后的結(jié)果如下所示:
[1, 2, 4, 5, 8]
來(lái)看第二個(gè)例子:
String[] yetAnotherArray = new String[] {"A", "E", "Z", "B", "C"}; Arrays.sort(yetAnotherArray, 1, 3, Comparator.comparing(String::toString).reversed());
只對(duì) 1-3 位置上的元素進(jìn)行反序,所以結(jié)果如下所示:
[A, Z, E, B, C]
08、數(shù)組搜索
有時(shí)候,我們需要從數(shù)組中查找某個(gè)具體的元素,比較直接的方式就是通過(guò)遍歷的方式:
int[] anArray = new int[] {5, 2, 1, 4, 8}; for (int i = 0; i < anArray.length; i++) { if (anArray[i] == 4) { System.out.println("找到了 " + i); break; } }
上例中從數(shù)組中查詢(xún)?cè)?4,找到后通過(guò) break 關(guān)鍵字退出循環(huán)。
如果數(shù)組提前進(jìn)行了排序,就可以使用二分查找法,這樣效率就會(huì)更高一些。Arrays.binarySearch() 方法可供我們使用,它需要傳遞一個(gè)數(shù)組,和要查找的元素。
int[] anArray = new int[] {1, 2, 3, 4, 5}; int index = Arrays.binarySearch(anArray, 4);
到此,關(guān)于“怎么使用Java數(shù)組”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!
當(dāng)前名稱(chēng):怎么使用Java數(shù)組-創(chuàng)新互聯(lián)
本文來(lái)源:http://jinyejixie.com/article14/ggcge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、小程序開(kāi)發(fā)、動(dòng)態(tài)網(wǎng)站、網(wǎng)站設(shè)計(jì)公司、網(wǎng)站設(shè)計(jì)、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容