2013-02-15 69 views
109

我最近在我的辦公室的Android項目中一直在使用ArrayList,而我在List和ArrayList之間有點混淆,這兩者有什麼區別,我應該用什麼?List和ArrayList有什麼不同?

另外我看到它的一些實現。

List<SomeObject> myList = new ArrayList<SomeObject>(); 

ArrayList<SomeObject> myList = new ArrayList<SomeObject>(); 

這兩個實例有什麼區別?

+6

可能的重複[類型列表與類型ArrayList在Java](http://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java),[Java List vs ArrayList]( http://stackoverflow.com/questions/9309093/java-list-vs-arraylist)和[List vs ArrayList](http://stackoverflow.com/questions/7726361/list-vs-arraylist);另外,[列表VS. ArrayList](http://www.coderanch.com/t/379305/java/java/List-ArrayList)和[更多](https://www.google.com/search?hl=zh-CN&q=java+清單+ VS + ArrayList的)! – Eric 2013-02-15 20:53:33

+3

http://stackoverflow.com/questions/6867484/what-is-a-list-vs-an-arraylist?rq=1 – 2013-02-15 20:54:01

+3

一個是接口,另一個是類。現在你可以自己找到它。 – 2013-02-15 20:54:12

回答

130

這兩個示例中的列表實現之間沒有區別。 然而,你可以在你的代碼中進一步使用變量myList。

當你定義名單爲:

List myList = new ArrayList(); 

你只能調用List接口中定義的方法和參考成員。 如果你將它定義爲:

ArrayList myList = new ArrayList(); 

你就可以調用ArrayList的,具體的方法和除了那些定義從名單繼承使用特定的ArrayList成員。然而,當你在ArrayList中實現的第一個示例中調用List接口的方法時,ArrayList中的方法將被調用(因爲List接口不實現任何方法)。

這就是所謂的多態性。你可以閱讀它。

+166

列表不是一個類,它是一個接口。它沒有任何實施的方法。所以如果你調用一個List引用的方法,你實際上在兩種情況下調用ArrayList的方法。 – robonerd 2013-02-15 21:28:53

+3

有一個區別,正如上面解釋的@robonerd。 List是一個接口,你不僅可以使用類或原始類型來輸入變量,還可以使用接口。 – emaringolo 2014-05-24 00:49:18

+4

夥計們,請仔細閱讀我的文章。不要將定義與實現混合在一起。在這兩種情況下,實現都是相同的:ArrayList。變量定義不同。不知道你要改變我的答案。 – ATrubka 2014-06-02 09:05:59

相關問題