這兩個對象之間的根本區別是什麼?更高效嗎?一個人有更多的方法嗎?什麼是List與ArrayList?
回答
A List
定義了ArrayList
使用的接口,該接口允許它實現允許實現List的所有其他類一起使用或以類似方式使用的方法。 ArrayList
總是也是List
,但List
不一定是ArrayList
。
也就是說,ArrayList
執行List
(在其他幾個接口之間)。
列表是一個接口; ArrayList是一個實現List接口的類。
接口定義了所需的方法簽名,但沒有說明它們是如何實現的。
實現接口的類承諾提供具有由接口聲明的相同簽名的方法的公共實現。
根據java docs,List只是一個接口,而ArrayList是實現它的類之一。特別是使用ArralyList而不是對ArrayList對象的List類型引用沒有內在的效率優勢。
但是,當涉及到「效率」時,List接口的不同實現之間可能存在差異。例如,LinkedList和ArrayList之間可能存在小的效率差異,具體取決於您如何使用它們。
引述Java文檔的ArrayList頁上,
增加操作運行在分期常量時間,即,添加N元素需要O(n)的時間。所有其他操作都在線性時間內運行(粗略地說)。與LinkedList實現相比,常數因子較低。
換句話說,性能差異可能可以忽略不計,但您可能會看到使用ArrayList(而不是LinkedList)的一些優勢。
如果你有興趣,ArrayList是用一個不時調整大小的數組實現的(很可能每當你的集合的大小增加一倍時),這與LinkedList的實現完全不同(詳見wikipedia )。
他不是。他問他什麼時候應該使用List以及何時應該使用ArrayList。 LinkedList並沒有進入它 - 正如所有以前的答案可能已經表明的那樣。 LinkedList是這個特定問題的誤導。 – RichieHH
考慮類似下面的一行:
List<String> names = new ArrayList<String>();
如果你是新的面向對象的架構,你可能期望而不是看到類似ArrayList<String> names = new ArrayList<String>();
。畢竟,你剛剛說過這是一個新的ArrayList
,所以你不應該將它存儲在類型爲ArrayList
的變量中?
那麼,你當然可以做到這一點。然而,List
是一個接口 - 就像各種各樣的模板 - 據說ArrayList
被繼承。這是一個合同,它說「任何時候你使用List
實現,你可以期待這些方法可用」。在List
的情況下,方法之類的東西add
,get
等
但ArrayList
只是List
一個實現。還有其他的,如LinkedList
。兩者具有相同的界面,並且可以以相同的方式使用,但在幕後工作方式非常不同。其中ArrayList
是「隨機」訪問,意味着它直接找到數組中的一個特定元素而沒有遍歷整個列表,所以LinkedList
確實必須從第一個元素開始,然後一個接一個地去找,直到它到達需要的元素。
事情是,雖然您確實需要在創建對象時指定您想要的內容,但通常只需要溝通的事實不只是它是List
,因此您只需說出它就是這樣。 List
表示您有一個旨在按給定順序的集合。如果你不需要太多的溝通,你可以考慮將它作爲Collection
傳遞給另一個接口(List
的超級接口)。或者,如果你需要溝通的是你可以迭代它,你甚至可以稱它爲Iterable
。
如何使用List和ArrayList
或List的其他實現是Polymorphism
和Inheritance
,也是使用Java等語言的原因。
簡單來說,多態是很多形式,而繼承是重用。
可以有多種混凝土,並準備好我們可供您使用的列表,如ArrayList,Vector
,LinkedList
和Stack
。決定使用哪個來自你,如果你看看List API,你會注意到所有這些List實現都以某種方式從List中延伸出來。
- 1. 多態性:爲什麼使用「List list = new ArrayList」而不是「ArrayList list = new ArrayList」?
- 2. List和ArrayList有什麼不同?
- 3. 帶有List和ArrayList的這條語句是什麼意思?
- 4. 什麼是Java中的List或ArrayList聲明差異?
- 5. 爲什麼我們寫ArrayList <ArrayList <Integer>> list = new ArrayList <>();
- 6. 什麼是List [String〜Int]?
- 7. 什麼是「return list == NULL?0:list-> value + fun(list-> next)」呢?
- 8. 什麼是靜態ArrayList?
- 9. List l = new ArrayList <Number>(); l的靜態類型是List <Number>?那是什麼意思?
- 10. 什麼是「列表<Integer> list = new ArrayList <Integer>();」其實是什麼意思?
- 11. shuffle multidimensional List,ArrayList,LinkedList
- 12. List(Int32)爲什麼將JSON序列化爲ArrayList?
- 13. 爲什麼不能在活動之間傳遞List(NOT ArrayList)?
- 14. 有什麼用的List <NameValuePair>或ArrayList <NameValuePair>
- 15. Array,ArrayList和List之間有什麼區別?
- 16. Java中的Collection,ArrayList和List之間的主要區別是什麼?
- 17. 什麼時候使用List以及何時使用ArrayList,也是Java中的LinkedList?
- 18. 我應該返回List還是ArrayList
- 19. git rev-list與git rev-list --date-order有什麼不同?
- 20. 在python中,len(list)是做什麼的?
- 21. 「unhashable type:'list'」錯誤是什麼意思?
- 22. Paged List的源代碼是什麼?
- 23. python中的list方法是什麼?
- 24. 什麼是Format-List的-view參數?
- 25. R中的「list(...)」是什麼意思?
- 26. pypeg:str或List是什麼意思?
- 27. 'list(contour)'的結果是什麼意思?
- 28. 爲什麼List [Int]是List [Boolean]的一個實例?
- 29. 爲什麼是List <>。OrderBy LINQ比IComparable + List <>更快。
- 30. Python中list [1]和list [1:]之間的區別是什麼?
天哪,*這*以前從未問過!對於OP,請先考慮搜索論壇。 –
@Hovercraft,你確定它從未被問過嗎? – Atreys
投票重新打開 - 我不認爲鏈接的帖子是重複的。這是關於編碼接口還是實現,而這實際上是問'List'和'ArrayList'之間的區別是什麼。 –