2012-01-17 43 views
2

我讀了Drools的規劃師例子,我遇到的代碼來了,如同這個有很多:帶有List和ArrayList的這條語句是什麼意思?

List<Column> columnList = new ArrayList<Column>(n); 

據我得到它,它應該是初始化長度爲n的列表,它存儲Column數據類型。


但是,什麼是與具有上表達的兩側不同的收集的數據類型交易?

如果ArrayList<Column>List<Column>類型的比賽,讓他從做不同:

List<Column> columnList = new List<Column>(n); 
+1

列表是一個接口,你不能實例化它 – milan 2012-01-17 14:48:17

回答

7

List是一個接口。您不能創建接口的實例。

ArrayList是一個實現List的類,你可以創建一個。

接口只是定義行爲。實現和接口的類實現該行爲。

你會注意到,如果你look at the API,許多不同的類實現List接口。這是因爲它們都提供List定義的方法的實現。此外,這些實現可能大不相同,因爲和ArrayList的工作方式不同,比如,LinkedList

最好是用表格

List list = new ListType()

,因爲你可以在以後更改列表實現,如果你想,在不影響你的代碼。這樣做的原因是,如果你做

ListType list = new ListType()

列表的類型爲ListType,其中僅中ListType和子類的實例有。

如果您執行上面顯示的首選分配,那麼您可以將分配的任何指定爲Listlist

6

List是一個接口。 ArrayListList的實現。

您不能這樣做new List<Column>(n),因爲List只是定義了必須實現的方法。

List = (some implementation)背後的想法是,您可以擁有根據接口契約行爲的與實現無關的代碼。 (即:你可以用LinkedList替換ArrayList,它會工作,雖然它將被完全不同的執行,並且顯然會有不同的性能特徵)。

6

列表是一個接口,不能實例化,所以new List將觸發編譯時錯誤。你可以做ArrayList<Column> columnList = new ArrayList<Column>(n);,但這種方式你不能輕易地在不同的List實現之間切換(ArrayList就是其中之一)。

+0

何時和爲什麼我們可能需要在不同的'List'實現之間切換? – cnova 2016-04-07 12:16:37

1

一點題外話到其他的答案,這是值得注意的是,ListcolumnListArrayList編譯時類型是運行時類型。