日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

Java开发笔记(二十三)数组工具Arrays

發(fā)布時(shí)間:2023/12/2 java 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java开发笔记(二十三)数组工具Arrays 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

數(shù)組作為一種組合形式的數(shù)據(jù)類(lèi)型,必然要求提供一些處理數(shù)組的簡(jiǎn)便辦法,包括數(shù)組比較、數(shù)組復(fù)制、數(shù)組排序等等。為此Java專(zhuān)門(mén)設(shè)計(jì)了Arrays工具,該工具包含了幾個(gè)常用方法,方便程序員對(duì)數(shù)組進(jìn)行加工操作。Arrays工具的方法說(shuō)明如下:

Arrays.equals(a1, a2); // 判斷a1和a2兩個(gè)數(shù)組是否相等,也就是每個(gè)元素是否都相等Arrays.fill(a, val); // 往數(shù)組a全部填入指定的數(shù)值valdest = Arrays.copyOf(src, newLength); // 把數(shù)組src的內(nèi)容賦值給數(shù)組dest,且dest的長(zhǎng)度為newLengthArrays.sort(a); // 對(duì)數(shù)組a的內(nèi)部元素進(jìn)行排序,結(jié)果是按照升序排序

?

下面分別對(duì)以上的四個(gè)數(shù)組處理方法進(jìn)行介紹:


1、Arrays.equals方法
前面說(shuō)過(guò),雙等號(hào)“==”可用來(lái)判斷兩個(gè)變量的數(shù)值是否相等,但“==”只適合基本變量類(lèi)型之間的比較,例如比較兩個(gè)整型變量是否相等、兩個(gè)雙精度數(shù)是否相等、兩個(gè)布爾變量是否相等。如果兩個(gè)數(shù)組變量通過(guò)“==”進(jìn)行相等判斷,則比較的是這兩個(gè)數(shù)組是否為同一個(gè)數(shù)組,而不是比較兩個(gè)數(shù)組的所有元素是否都相等。要想判斷兩個(gè)數(shù)組內(nèi)部的每個(gè)元素是否一一相等,就必須通過(guò)Arrays工具的equals方法來(lái)辨別。equals方法返回true表示兩個(gè)數(shù)組的所有元素都相等,返回false表示兩個(gè)數(shù)組至少有一個(gè)元素不相等。

2、Arrays.fill方法
在聲明數(shù)組變量的時(shí)候,經(jīng)常需要對(duì)它進(jìn)行初始化賦值,比如書(shū)店進(jìn)了十本書(shū),每本書(shū)的售價(jià)都是99元,那么按照常規(guī)寫(xiě)法只能書(shū)寫(xiě)十遍99,就像下面代碼這樣:

// 構(gòu)造一個(gè)包含十個(gè)99的數(shù)組變量int[] prices = {99, 99, 99, 99, 99, 99, 99, 99, 99, 99};

?

顯然輸入重復(fù)的數(shù)字是個(gè)負(fù)擔(dān),尤其重復(fù)數(shù)量很多的時(shí)候更甚。現(xiàn)在利用Arrays的fill方法,只需一行代碼即可對(duì)該數(shù)組的所有元素都填上相同的數(shù)值,于是數(shù)組的初始賦值代碼便優(yōu)化為下面這樣:

// 聲明一個(gè)整型數(shù)組,數(shù)組大小為10int[] prices = new int[10];// 給整型數(shù)組的每個(gè)元素全部填寫(xiě)99Arrays.fill(prices, 99);// 打印整型數(shù)組的所有元素?cái)?shù)值for (int price : prices) {System.out.println("price = "+price);}

  

3、Arrays.copyOf方法
把一個(gè)數(shù)組變量賦值給另一個(gè)數(shù)組變量,似乎可以用等號(hào)直接賦值,這種情況在一般情況下沒(méi)有問(wèn)題。但若是賦值之后修改了原數(shù)組的某個(gè)元素,那就出現(xiàn)問(wèn)題了。譬如以下的演示代碼,先把數(shù)組變量pricesOrigin賦值給pricesAssign,接著修改原數(shù)組pricesOrigin的元素值,再去打印新數(shù)組pricesAssign的所有元素:

// 聲明一個(gè)整型數(shù)組,數(shù)組大小為5,并且5個(gè)元素全為99int[] pricesOrigin = {99, 99, 99, 99, 99};// 復(fù)制數(shù)組的第一個(gè)辦法:利用等號(hào)直接賦值int[] pricesAssign = pricesOrigin;pricesOrigin[1] = 80;for (int price : pricesAssign) {System.out.println("assign price = "+price);}

?

運(yùn)行以上的演示代碼,完整的日志輸出如下所示:

assign price = 99 assign price = 80 assign price = 99 assign price = 99 assign price = 99

?

沒(méi)想到打印出來(lái)的第二個(gè)數(shù)組元素竟然變了,可是演示代碼明明只改了原數(shù)組pricesOrigin,并未修改新數(shù)組pricesAssign呀。讓測(cè)試程序出現(xiàn)神經(jīng)錯(cuò)亂的緣故,乃是數(shù)組之間的等號(hào)賦值相當(dāng)于給數(shù)組起個(gè)別名,并非從頭到尾完整復(fù)制一個(gè)新數(shù)組出來(lái)。既然只是起了個(gè)別的名稱(chēng),那么實(shí)際上還是原名稱(chēng)所指的數(shù)組,無(wú)非是該數(shù)組有兩個(gè)姓名罷了。
顯然這個(gè)情況不是程序員期望的結(jié)果,程序員的本意是復(fù)制另外的數(shù)組,新數(shù)組不再與原數(shù)組有任何關(guān)聯(lián),大家井水不犯河水,互不干涉、互不影響。最好克隆一個(gè)一模一樣的新數(shù)組出來(lái),Java恰巧給每個(gè)數(shù)組變量都提供了clone方法,該方法正是拿來(lái)克隆數(shù)組用的。克隆出來(lái)的新數(shù)組有分配單獨(dú)的存儲(chǔ)空間,并且數(shù)組元素的數(shù)值與原數(shù)組完全一致,如此便實(shí)現(xiàn)了正常意義上的數(shù)組賦值功能。利用clone方法復(fù)制數(shù)組變量的示例代碼如下:

// 復(fù)制數(shù)組的第二個(gè)辦法:調(diào)用原數(shù)組的clone方法int[] pricesClone = pricesOrigin.clone();pricesOrigin[1] = 80;for (int price : pricesClone) {System.out.println("clone price = "+price);}

?

運(yùn)行如上的示例代碼,得到下面的日志輸出結(jié)果:

clone price = 99 clone price = 99 clone price = 99 clone price = 99 clone price = 99

?

可見(jiàn)此時(shí)修改了原數(shù)組的元素?cái)?shù)值,并沒(méi)有改變新數(shù)組的元素值,真正做到了完整的復(fù)制操作。
不過(guò)clone方法人如其名,它把原數(shù)組的所有元素一個(gè)不漏全部復(fù)制到新數(shù)組,這意味著,如果只想復(fù)制部分元素給新數(shù)組,那末clone方法就無(wú)能為力了。為此,Java給Arrays工具增配了一個(gè)copyOf方法,該方法允許從來(lái)源數(shù)組復(fù)制若干元素給目標(biāo)數(shù)組。當(dāng)待復(fù)制的元素個(gè)數(shù)恰好等于原數(shù)組的大小時(shí),copyOf方法的作用等同于數(shù)組變量的clone方法。下面是通過(guò)copyOf方法將數(shù)組原樣復(fù)制到新數(shù)組的代碼例子:

// 復(fù)制數(shù)組的第三個(gè)辦法:調(diào)用Arrays工具的copyOf方法int[] pricesCopy = Arrays.copyOf(pricesOrigin, pricesOrigin.length);pricesOrigin[1] = 80;for (int price : pricesCopy) {System.out.println("copy price = "+price);}

?

從上面代碼看到,copyOf方法身后跟著兩個(gè)參數(shù),第一個(gè)參數(shù)是原數(shù)組的名稱(chēng),第二個(gè)參數(shù)是要復(fù)制的元素個(gè)數(shù)。接下來(lái)把第二個(gè)參數(shù)改小一點(diǎn),看看copyOf方法是否真的支持只復(fù)制部分元素?于是第二個(gè)參數(shù)改為“pricesOrigin.length-1”之后的代碼如下所示:

// 改變copyOf方法的第二個(gè)參數(shù)值,允許復(fù)制指定大小的數(shù)組元素int[] pricesPart = Arrays.copyOf(pricesOrigin, pricesOrigin.length-1);for (int price : pricesPart) {System.out.println("part price = "+price);}

?

重新運(yùn)行修改后的數(shù)組復(fù)制代碼,日志輸出結(jié)果見(jiàn)下:

part price = 99 part price = 99 part price = 99 part price = 99

?

這下看到新數(shù)組的元素只有四個(gè),而原數(shù)組共有五個(gè)元素,說(shuō)明此時(shí)的確只復(fù)制了部分元素。
Arrays工具的copyOf方法還有個(gè)妙用,比如有個(gè)數(shù)組分配了初始大小為5,現(xiàn)在想把該數(shù)組的長(zhǎng)度擴(kuò)大到10,這時(shí)利用copyOf方法就能動(dòng)態(tài)調(diào)整數(shù)組的大小。具體做法是:調(diào)用copyOf方法之時(shí),來(lái)源數(shù)組和目標(biāo)數(shù)組都填該數(shù)組的名稱(chēng),然后待復(fù)制的元素大小填寫(xiě)擴(kuò)大后的長(zhǎng)度。下面的代碼便演示了如何將某數(shù)組的大小拉長(zhǎng)一位:

// 把copyOf方法的返回值賦給原數(shù)組,可以動(dòng)態(tài)調(diào)整該數(shù)組的大小pricesOrigin = Arrays.copyOf(pricesOrigin, pricesOrigin.length+1);for (int price : pricesOrigin) {System.out.println("origin price = "+price);}

?

運(yùn)行調(diào)整數(shù)組大小的演示代碼,觀察到以下的日志輸出:

origin price = 99 origin price = 99 origin price = 99 origin price = 99 origin price = 99 origin price = 0

?

由此可見(jiàn),數(shù)組大小果然增大了一位,并且新增的數(shù)組元素值為0,這正是整型變量的默認(rèn)數(shù)值。

4、Arrays.sort方法
顧名思義,Arrays工具的sort方法是給數(shù)組元素排序的,并且排序結(jié)果為升序。sort方法用起來(lái)很簡(jiǎn)單,只要把待排序的數(shù)組名稱(chēng)填進(jìn)圓括號(hào),編譯器就會(huì)自動(dòng)完成該數(shù)組的排序任務(wù)。舉個(gè)給整型數(shù)組排序的例子,簡(jiǎn)單的Java實(shí)現(xiàn)代碼如下:

int[] pricesOrigin = {99, 80, 18, 68, 8};// 對(duì)整型數(shù)組pricesOrigin里的元素進(jìn)行排序操作,sort方法得到的結(jié)果是升序排列Arrays.sort(pricesOrigin);for (int price : pricesOrigin) {System.out.println("origin price = "+price);}

?

運(yùn)行上述的排序代碼,得到下面的結(jié)果日志:

origin price = 8 origin price = 18 origin price = 68 origin price = 80 origin price = 99

?

從日志看到,排序后的數(shù)組元素從小到大打印,很明顯這是升序排列。
當(dāng)然,在前面的例子中,數(shù)組元素早在聲明數(shù)組時(shí)便初始化賦值了,實(shí)戰(zhàn)性不強(qiáng)。接下來(lái)嘗試動(dòng)態(tài)生成一個(gè)隨機(jī)數(shù)數(shù)組,再對(duì)該數(shù)組進(jìn)行排序,這樣更貼近實(shí)際業(yè)務(wù)。詳細(xì)的實(shí)現(xiàn)代碼可能涉及到數(shù)組、循環(huán)、冒號(hào)跳轉(zhuǎn)等技術(shù),有興趣的朋友不妨動(dòng)手實(shí)踐。下面是隨機(jī)數(shù)組生成并排序的代碼例子:

int[] numbers = new int[20];loop : for (int i=0; i<numbers.length; i++) {// 生成一個(gè)小于100的隨機(jī)整數(shù)int item = (int) Math.round(Math.random()*1000%100);// 下面的循環(huán)用來(lái)檢查數(shù)組中是否已經(jīng)存在該隨機(jī)數(shù)for (int j=0; j<i; j++) {if (numbers[j] == item) {i--;// 已經(jīng)存在該隨機(jī)數(shù),則繼續(xù)第一層循環(huán),重新生成隨機(jī)數(shù)continue loop;}}// 原數(shù)組不存在該隨機(jī)數(shù),則把隨機(jī)數(shù)加入到數(shù)組中numbers[i] = item;}// 對(duì)整型數(shù)組numbers里的元素進(jìn)行排序操作,sort方法得到的結(jié)果是升序排列Arrays.sort(numbers);for (int number : numbers) {System.out.println("number = "+number);}

 

更多Java技術(shù)文章參見(jiàn)《Java開(kāi)發(fā)筆記(序)章節(jié)目錄》

轉(zhuǎn)載于:https://www.cnblogs.com/pinlantu/p/9955362.html

總結(jié)

以上是生活随笔為你收集整理的Java开发笔记(二十三)数组工具Arrays的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。