Java整數數組和泛型數組是Java程式設計中常用的資料結構。整數數組是一種特定類型的數組,只能儲存整數類型的資料。而泛型數組是一種更靈活的數組類型,可以儲存任意類型的資料。在Java中,我們可以使用整數陣列和泛型陣列來實現各種功能,例如排序、尋找、插入、刪除等操作。本文將由php小編草莓為大家介紹Java整數陣列和泛型陣列的基本概念和常用操作,幫助讀者更能理解和應用這兩種陣列類型。
2022 年版《普林斯頓評論》的「ap 電腦科學 a prep」包含使用以下程式碼的範例問題:
public class Screen { private ArrayList<int>[] data; . . . }
有沒有 java 版本 arraylist<int>
是有效的建構?我的理解是,在所有情況下都需要是 arraylist<integer>
。使用 java 17 和 21(這是我的系統上安裝的),arraylist<int>
會產生 unexpected type
錯誤。
如果我們定義為 arraylist<integer>[] data
,我們如何正確實例化它?顯而易見的解決方案是data = new arraylist<integer>[10]
(假設我們想要10 個arraylist),但由於java 不支援泛型數組,所以在建立 泛型數組時會失敗。
我試著去了解這本書是否有錯誤,或者我對 java 的理解是否完全缺乏。謝謝!
沒有。絕不。泛型不能包含原始類型,甚至沒有一個可以包含原始類型的Java 版本(如果你曾經可以,你不認為這會是一件大事,特別是它的刪除嗎?Java 很少破壞向後相容性!)
不可能。您無法正確實例化它2。擁有非原始類型的數組是沒有任何意義的。 List<List<Integer>>
在所有方面都優於 List<Integer>[]
。所以,就製作一個清單的清單。
隨意的網路搜尋找不到這本書的具體內容,你提供的連結也沒有找到它(毫無疑問,它很難找到,我認為它受版權保護,而且作者不想要它)無需付費即可輕鬆存取)。我正在尋找的關鍵內容在那一章中有一些上下文解釋了為什麼這是不可能的,或者這是一個壞主意,或者,好吧,任何表明你正在強調的問題這正是這本書試圖表達的觀點。
如果這不在書中,並且他們要么聲稱這是有效的 java,要么他們聲稱它在某種程度上相關,那麼它就是一本垃圾書。也許這就是我在網路上找不到它的原因:)
總結一下:
您無法建立 List<int>
。你現在不能這樣做。你從來沒能做到。 1
List<Integer>[]
是白痴。任何程式碼都不應該這樣寫。數組有各種各樣的缺點。它們的優點很少;它們的優點在這種情況下是無關緊要的,這就是數組確實存在的原因(部分作為低級“粘合劑” - java.util.ArrayList
的實現是用java 寫的,並在內部使用Object[]
。有些東西必須- 部分原因是int[]
目前在空間和時間上確實比List<Integer>
更有效率。因此,你永遠不應該寫作的愚蠢想法,因此任何深入探討如何使其發揮作用的書都是......奇怪的。對於那些已經進入Java 職業生涯15 年的人來說,這應該是一個很好的教訓(如果有的話)。這就像向賽車手教授原版福特T 型車的變速箱一樣。它與汽車相關。不過,無論從中吸取什麼教訓,都完全無關緊要。
[1]可能在JDK25 左右可能能夠- Project Valhalla 是OpenJDK 團隊,正在嘗試找到一種方法來創建可編碼的資料類型類似於標準引用類型,但執行和行為類似於基元,並且作為其中的一部分,List<int>
可能可以變成一個東西。特別是這部分(嘗試將int
僅視為j.l.Integer
的值類型變體,並使這些類型在泛型中工作)是Valhalla 專案尚未真正解決的問題,而且可能永遠不會解決- 有顯著的向後相容性問題。例如j.u.List
介面如何具有方法remove(int x)
,該方法刪除索引int x
處的對象,以及方法remove(Object o)
,該方法掃描列表,比較每個物件在o
的列表中- 一旦找到匹配項(item.equals(o)
是true
),即被刪除,並且remove
方法傳回。除了以下問題: remove()
、contains()
等將Object
作為參數,而不是E
(因為你可以問蘋果清單中是否有給定的梨子。答案非常簡單:不,但是,這不是不合邏輯的問題,因此為什麼做出這個選擇) - 嘗試統一泛型和基元意味著兩個簽名現在都是remove(int)
,這顯然不可能。這只是瓦爾哈拉最棘手的部分並且可能永遠不會發生的一百萬個原因之一。如果您想了解更多相關信息,或者只是了解最新動態,查看 JEP 218.此編輯是由 @M.Justin 的評論帶來的:)
[2]「適當」是一個主觀用語。我在這裡定義它,正如我所期望的那樣:編譯器的警告為零,不需要 @SuppressWarnings
。也可能定義為:在不破壞數組所做的承諾的情況下- 這也是不可能的(一個“承諾”是數組可以在運行時通過arrRef.getClass() 告訴您其組件類型.getComponentType( )
。簡單地說,這只能告訴你:我是一個ArrayList
引用的數組- 它不能告訴你ArrayList<Integer>
。只有ArrayList
。
#ArrayList<int>
是有效的建構嗎? - 否。在 Java 中,泛型類型不適用於原始資料類型。
我們如何正確實例化 ArrayList<Integer>[]
? - 您可以透過以下方式實現 -
List<Integer>[] a = new ArrayList[10];
Java 不允許您建立通用陣列,但您可以簡單地建立物件數組,在本例中為 ArrayList。雖然這會給您警告未經檢查或不安全的操作,但您可以透過 @SuppressWarnings
註解來克服這個問題。
以上是Java 整數數組和泛型數組的詳細內容。更多資訊請關注PHP中文網其他相關文章!