我正在爲Android開發,想知道ArrayList和List之間的主要區別是什麼?我應該使用ArrayList <?>或列表<?>
回答
爲了處理Java中的對象集合,已經提供了Collection接口。這在java.util package
可用。
「列表」是一個接口,它擴展了集合接口,提供某種額外方法而不是集合接口來處理集合。其中「ArrayList」是「List」接口的實際實現。
ArrayList類除了列表接口中的可用方法外,還只有幾種方法。這裏沒有太大的區別。唯一的區別是,您正在創建第一個父接口的引用,以及第二個實現List的類的引用(即ArrayList類)。如果你使用第一個,你將能夠調用List接口中可用的方法,並且不能調用ArrayList類中可用的新方法。如果使用第二個方法,則可以自由使用all ArrayList中可用的方法。
編輯:
在Java應用程序的開發,當你應該通過集合框架對象作爲參數傳遞給方法,那麼最好是去與
List tempList = new ArrayList();
somemethodcall(tempList);
,因爲在未來由於性能限制,如果您要更改實現以使用鏈表或其他實現List接口的類而不是ArrayList,則只能在實例化部分的一個點(即)處更改。否則,你應該改變所有的領域,你曾經使用特定的類實現作爲方法參數。
List
是ArrayList
實現的接口。如果您嘗試創建某種方法需要某種類型的List
,但您不打擾實際使用的實現方式,請使用List
。
如果你實際上是一個類實例化,那麼你必須選擇List
其中之一的一些實施ArrayList
List<String> l1 = new ArrayList<String>();
將是一個例子。
無法實例的接口,因此會得到一個錯誤,如果你想做到以下幾點:
List<String> l2 = new List<String>();
我相信這是一個接口。 – 2012-07-18 12:31:45
@Benito Lol我編輯過,我累了,寫了錯誤的東西:) – 2012-07-18 12:32:35
上有wikipedia有關,其中ArrayList中被稱爲「動態數組」的好文章。
如果您正在嘗試優化您的應用程序,則應該查看文章旁邊的表格。
List
是一個接口,ArrayList
是List
接口的實現。除了List
接口中可用的方法以外,ArrayList
類只有幾種方法。
user370305給出了一個確切的解釋。這也可以幫助您瞭解Java中的集合層次結構。
- 1. MalformedParameterizedTypeException當使用ArrayList <ArrayList<>>
- 2. ArrayList <Object <ArrayList <Object> >>
- 3. ArrayList的用法<ArrayList<E>>
- 4. 我應該聲明/初始化的ArrayList的列表,的ArrayList,或<Cat>
- 5. 使用列表<ClassName> abc = new ArrayList <ClassName>();
- 6. 如何將ArrayList <Object>轉換爲ArrayList <String>或ArrayList <Timestamp>?
- 7. ArrayList <ArrayList <String>> vs ArrayList <Object>
- 8. 轉換ArrayList <ArrayList <String>>「返回」ArrayList <String>
- 9. 我可以將列表<Date>轉換爲ArrayList <String>?
- 10. 應該使用哪一個:python- <module>或<module> -python?
- 11. 爲什麼我們寫ArrayList <ArrayList <Integer>> list = new ArrayList <>();
- 12. 我應該公開ISubject <T>或IObservable <T>和IObserver <T>?
- 13. 我應該使用boost :: ptr_vector <T>還是vector <boost :: shared_ptr <T>>?
- 14. 我應該使用<html>,<head>和<body>標記嗎?
- 15. ArrayList <ArrayList <Integer>> IndexOutOfBoundsException
- 16. ArrayList <> vs ArrayList <Integer>
- 17. ArrayList的問題<ArrayList <String>>
- 18. Transpose ArrayList <ArrayList <String>> in Java
- 19. 我應該使用HTML <button>還是<input>?
- 20. 我應該使用<section>標籤裏面<aside>?
- 21. 我們是否應該每<input>使用<label>?
- 22. DataTable.diff(列表<Map>)或列表<String[]>在cucumber-jvm
- 23. 如何聲明HashMap <String,ArrayList <ArrayList <String> >>?
- 24. Java的可迭代<Iterable<T>>到ArrayList的<ArrayList<T>>
- 25. static Hashtable <Leader,ArrayList <Integer>> assignedLeader = new Hashtable <Leader,ArrayList <Integer>>(20);
- 26. ArrayList的ArrayList列表<integer>
- 27. 新的ArrayList <Class>()或新的ArrayList <>()在Java中?
- 28. 列表<String> stringList = new ArrayList <String>()和列表<String> stringList = new ArrayList()是什麼區別?
- 29. 從列表<myType>繼承或擴展列表<myType>
- 30. 轉換列表<ScanResults>到的ArrayList <HashMap的<String>>
你看過他們各自的文件嗎?這應該立即回答這個問題。 – 2012-07-18 12:28:48
@KonradRudolph我不認爲這是真的,對於不瞭解接口等的人來說,文檔看起來像任何其他類。 – 2012-07-18 12:34:36
@Jon好吧,如果你不知道接口,那麼整個討論都是無關緊要的。 – 2012-07-18 12:35:32