簡體   English   中英

List和ArrayList之間的Java關系

[英]Java relation between List and ArrayList

為什么1ok ,但2compilation error3 ,我們得到warning messageList是一個原始類型,引用泛型類型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

ArrayListimplements List的類。

List視為可以具有多個實現( ArrayListLinkedList )的協定

  1. ArrayList是類,可以實例化。 因此,在1中沒有問題。
  2. 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對象作為其接口而不是類。

Listjava.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM