說我想在java中使用鏈表。我認爲最好的創建方法是:Java數據結構(簡單問題)
List list = new LinkedList();
但我注意到這樣我只能使用通用列表上的方法。我假設實現在不同的數據結構中是不同的。
所以,如果我想使用鏈表的具體方法,我必須要創建列表:
LinkedList的名單=新的LinkedList();
這樣做的主要原因是什麼?
Tnanks。
說我想在java中使用鏈表。我認爲最好的創建方法是:Java數據結構(簡單問題)
List list = new LinkedList();
但我注意到這樣我只能使用通用列表上的方法。我假設實現在不同的數據結構中是不同的。
所以,如果我想使用鏈表的具體方法,我必須要創建列表:
LinkedList的名單=新的LinkedList();
這樣做的主要原因是什麼?
Tnanks。
List
是一個抽象底層列表實現的接口。它也由例如ArrayList
。
但是,如果您特別想要一個LinkedList
,寫入LinkedList list
沒有任何問題。事實上,如果你只是通過它周圍的名單,人們可以(不知道實現)不知不覺寫這樣的算法:
for(int i = 0; i < list.size(); i++)
{
// list.get(i) or list.set(i, obj)
}
這是一個隨機訪問列表上的直線(如ArrayList
),但二次上一個LinkedList
(最好使用迭代器或列表迭代器)。 Java提供了RandomAccess標記接口,以便您可以區分。
當然,您也可以將這些方法稱爲LinkedList
,但人們應該更可能考慮成本。
請注意,因爲這個原因,在.NET LinkedList
中沒有實現IList
。
第一個習慣用法允許您更改列表指向的運行時類型,而無需修改任何使用它的客戶端代碼。
LinkedList中的哪些方法,你認爲你需要的不在List中?你總是可以爲這些人投。
但接口背後的整個想法是爲了防止客戶端接口的實現。
如果你真的需要一個LinkedList,那就這樣吧。但我更喜歡第一個成語,因爲大多數時候我真的只需要List方法。
每個LinkedList也是一個List。這也意味着您可以使用LinkedList完成所有任務,您可以使用List完成任務,並且可以將LinkedList存儲爲List。但是,當您將它作爲List存儲時,只能調用List也具有的LinkedList方法。
順便說一句:這不是泛型。泛型是這樣的:
LinkedList<String> list = new LinkedList<String>();
List list = getSomeList();
在這裏,我們說這是一個列表。你不知道它是否是LinkedList
或ArrayList
或其他什麼。這是一個抽象的東西(我認爲你的意思是「抽象」的單詞「通用」,因爲generics是完全不同的東西)。因此,你不能把它看作是一個LinkedList
- 你必須把它看作是一個List
(它是)。
「你知道」這是一個LinkedList
的事實都很好,你可以安全地施放,如果你需要這樣做。但它可能有助於告訴編譯器它是一個LinkedList
,通過聲明它,如果它總是作爲LinkedList
。
爲了上帝的愛。請通過縮進四個空格將代碼標記爲代碼。 http://daringfireball.net/projects/markdown/syntax#precode – 2010-11-06 20:06:03