[英]Java relation between List and ArrayList
為什么1
是ok
,但2
是compilation error
和3
,我們得到warning message
( List
是一個原始類型,引用泛型類型List<E>
應參數)和4
再次給出compilation error
?
1- List<Integer> list = new ArrayList<Integer>()//Ok
2- List<Integer> list = new List<Integer>()//compilation error
3- List<List> list = new ArrayList<List>()//Warning
4- List<Integer> list = new List<Integer>()//Compilation error
List
是一個interface
。
ArrayList
是implements
List
的類。
將List
視為可以具有多個實現( ArrayList
, LinkedList
)的協定
ArrayList
是類,可以實例化。 因此,在1中沒有問題。 List
是接口。 您無法實例化界面。 因此,編譯錯誤在2和4中。 似乎您是Java的新手。 原因是List是一個接口。 如果看到接口的定義,則無法實例化它。 ArrayList是可以實例化List接口的實現。
1 - List<Integer> list = new ArrayList<Integer>()//Ok
因為ArrayList
實現List
所以ArrayList
是一個 List
,可以由List
類型的引用變量指向
2- List<Integer> list = new List<Integer>()//compilation error
您不能創建List
對象作為其接口而不是類。
3- List<List> list = new ArrayList<List>()//Warning
因為內部List
不知道它將存儲什么類型的對象,所以它應該類似於
List<List<String>> list = new ArrayList<List<String>>()
刪除警告
4- List<Integer> list = new List<Integer>()//Compilation error
您不能創建List
對象作為其接口而不是類。
List
是java.util.collection
包中的接口。 您不能實例化接口。
ArrayList是List接口的具體實現。
ArrayList implements List
在面向對象的編程中,我們能夠編寫實際上並不存在的東西。 列表就是其中之一,它是一個接口。 接口實際上並沒有對代碼做任何事情,而是充當了承諾或合同。
創建列表的方式有很多-在某些應用程序中某些方法較慢,有些則更快。 最受歡迎的兩個是ArrayList和LinkedList。 ArrayList將您的列表支持在數組中,支持非常快速的索引編制-您可以非常快速地將對象置於位置n。 LinkedList在添加和刪除新對象方面更快(實際上並非如此,原因要深得多)。 在某些情況下,一個可能更好,而在其他情況下,另一個可能更好。
因此,如果我創建一個遍歷列表並獲取每個項目中數據的方法,那么我就不會依賴於這些List實現中任何一個的特殊功能。 我應該選擇哪一個? 我是否應該因為我任意決定那是我將要使用的那個而強迫用戶從其LinkedList創建一個ArrayList?
列表是這里的答案。 我沒有對他們如何創建列表做任何假設,我所做的只是依靠我知道將在每個列表中使用的某些方法,因此我不會使用戶與我保持一致。 但是List本身沒有任何實例化-當您調用new List()時,這意味着什么? 好吧,這沒有任何意義。
但是,你可以做
List<String> stringList = new ArrayList<String>()
這是為什么? 在我的List ArrayList的實際實現中調用了“ new”。 這不是它的常用用法,但是允許這樣做,因為實際上背后有一個真實的列表-不僅僅是列表的承諾。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.