2013-02-19 24 views
-3

我用這兩條語句,ArrayList的定義:這兩個arrayList定義有什麼不同?

ArrayList<String> my = new ArrayList<>(); 
List<String> my2 = new ArrayList<>(); 

一個我應該使用哪一個?

+1

http://stackoverflow.com/questions/2279030/type-list-vs-type-arraylist-in-java – Garry 2013-02-19 16:28:13

+0

downvote對於較差的研究努力 - 您應該在發佈前找到*確切*重複。 – djechlin 2013-02-19 16:28:49

回答

3

你的第二個定義,你可以在以後更換的ArrayList構造另一種類型的列表,如一個LinkedList或高高性能列表,或任何其他類型的列表可能在未來存在。在你的第一個定義中,你永遠綁定到ArrayList實現。你不能改變它,因爲你的代碼的其餘部分信任這個引用是顯式的ArrayList。

通過使用接口,相反,你的代碼依賴於一個合同,該接口的,而不是在一個特定的實現(如ArrayList)。這使您可以在不影響用戶的情況下更改實施。改變是我們必須提前制定和計劃的事情,因爲我們無法防止事情發生變化。

+0

我不敢相信你在這個答案裏沒有使用[這個鏈接](http://stackoverflow.com/q/383947/1065197) – 2013-02-19 16:30:48

1

後者。編程到一個接口,而不是一個實現。

1

取決於你需要什麼。如果可能的話,通常建議使用接口(因此使用List),否則你會堅持實現類。比方說,你使用ArrayList作爲某些方法的輸入參數。出於某種原因(例如性能),您決定在某個時刻從ArrayList切換到LinkedList。所以你必須改變輸入參數的類型。如果你使用接口(List),你可以更自由地切換實現而不需要重構代碼。