我總是會學習何時聲明一個我們應該做的集合,如果我想用例如一個LinkedList,我會做List ob = new LinkedList()
,但是我不能訪問LinkedList中的所有方法..是不是LinkedList ob = new LinkedList()
100%正確?在Java中聲明一個LinkedList
回答
是不是LinkedList ob = new LinkedList()100%正確嗎?
嗯,我會建議使用通用的形式,但肯定的 - 如果你想使用的功能是具體到LinkedList
,需要相應聲明變量。
您可能想要檢查Deque<E>
或Queue<E>
接口是否具有您想要的。如果他們這樣做,那麼使用那些描述你需要什麼的想法,而不是使用什麼實現。
實際上沒有任何方法_specific_ to'LinkedList';一切都會覆蓋一個超類方法(比如'clone()')或者實現一個接口的方法。如果你想使用'Deque'(例如,'peek()')指定的方法以及'List'指定的方法(例如'indexOf()'),但是兩者都沒有指定,那麼沒有太多選擇聲明變量爲'LinkedList'。 – 2012-03-23 18:07:04
是,
LinkedList<...> items = new LinkedList<...>();
是完全正確的,如果你知道items
將取決於沒有在List<T>
接口捕獲的LinkedList<T>
方法。
不完全正確。
聲明任何集合的首選方法是包含它所持有的數據類型。所以,舉個例子,它會是LinkedList<Integer> ob = new LinkedList<Integer>();
。
規則「總是編碼到接口」必須具有一定的靈活性。你提出的建議是好的,當你得出結論時,唯一的選擇。作爲一個附註,編碼到像這樣的具體類更快是大多數JVMs。決定演出是否值得打破這一規則是很難決定的。
你有一些數據來支持這個說法嗎?這是我第一次聽說接口編碼可能比具體類慢。 – 2012-03-23 18:05:45
@krzyk - 你自己來測試它並不難。對list.get()這樣的方法的調用,在聲明列表'
http://developer.android.com/guide/practices/design/performance.html#myths。爲了公平起見,這個聲明涉及沒有JIT的JVM。 – 2012-03-23 18:57:20
如果您確實需要使用不在List接口上的方法,那麼使用LinkedList的API肯定沒有問題。對List接口編程的一般規則認識到:1)很少需要這些方法; 2)在大多數人的經驗中,更有可能發現我需要對列表進行排序和/或使用大量隨機訪問,並決定切換到一個ArrayList,比我只需要一個LinkedList的方法。
如果您發現List沒有給您需要的東西,那麼您可能正在對Queue接口進行編程。
LinkedList是一個通用的。你應該做的事:
LinkedList<String> linkedList = new LinkedList<String>();
(或任何其他你需要有存儲,而不是字符串中)
你應該總是儘量保持在最高水平可能的聲明,這意味着你應該停在最高級別,提供您需要的所有功能:如果List
方法不夠用,您完全可以使用LinkedList
聲明。
其實它會更好,如果它參數化,因爲兩者都是原始類型。
都能跟得上。這是錯誤的,在後期階段,如果他想從鏈表他實現更改爲任何其他實施名單式的,他就一定會出問題。所以最好使用界面級別宣言。
我不會總是建議你使用泛型..... 堂妹有時你可能需要換不同的對象爲這裏....
String str="a string";
boolean status=false;
LinkedList ll = new LinkedList();
ll.add(str);
ll.add(status);
在某些情況下,例如RMI的情況下, ü只能發送串行數據.....並假設你想送一個類對象(這是反序列化)......在那裏,你可以在一個LinkedList和通包裹類(元)的成員,對象作爲一個整體.......不擔心大量的參數...... 考慮例如:
public Class DataHouse
{
public int a;
public String str;
.
.
.
}
現在某處u需要傳遞的對象.... 你可以做以下....
DataHouse dh =new DataHouse();
LinkedList ll = new LinkedList();
ll.add(dh.a);
ll.add(dh.str);
// Now the content is serialized and can pass it as a capsuled data......
你仍然可以訪問LinkedList的方法,通過使用列表中,你所要做的就是類型轉換 例如
((LinkedList)ob).add()
使用泛型列表,而不是點LinkedList的是,因爲萬一你只需改變你使用列表的類型(假設雙向鏈表)您的程序仍然可以工作泛型是簡化您的代碼,使其更便攜,更「易變」
- 1. Palindromes在一個聲明:Java
- 2. Java中LinkedList的LinkedList?
- 3. 在Java中聲明集合
- 4. 在java中聲明數組
- 5. 在Java中聲明'long'over'int'
- 6. 多個在一個聲明中
- 7. 如何在java中的類中聲明一個ArrayList對象?
- 8. 的LinkedList在Java
- 9. 在聲明中聲明一個scala變量2
- 10. 在類聲明中聲明一個類對象的指針
- 11. WHEN聲明後另一個當聲明
- 12. 定義的函數,在一個聲明中聲明一個變量
- 13. 在Java中使用JFrame聲明一個類的數組
- 14. 如何在Java/Anylogic中聲明一個排序函數?
- 15. 如何在Java中聲明一個JComboBox數組
- 16. 聲明一個對象在java中同步
- 17. 如何在Java中聲明一個對象數組?
- 18. 是否有可能在Java中聲明一個1位變量?
- 19. 如何在java中聲明一個unsigned long類型?
- 20. 如何在Java中聲明一個很長的數組?
- 21. 在Java中聲明一個字節數組的數組
- 22. 聲明與一個聲明多個變量中MiniZinc
- 23. 在Java中的LinkedList的
- 24. 在Java中迭代LinkedList
- 25. java stringbuffer聲明
- 26. Java ArrayList聲明
- 27. Java類聲明
- 28. Java IF聲明
- 29. Java聲明
- 30. Java String聲明
LinkedList的OB =新的LinkedList(),創建對象這種方式只是要使用LinkedList類,沒有錯..再次它取決於你從實現想要的東西。 – 2012-03-23 18:15:56
取決於你想要達到的目標,檢查了這一點:檢查你的答案] [1]這裏http://stackoverflow.com/questions/2451849/polymorphic-call – 2012-03-23 18:13:56
好Q,馬爾西奧。 剛纔我碰到,我想利用'addfirst僅(E E)'和'addlast僅(E E)'的情況下,也沒有找到那些'List'接口。 – Vikram 2013-11-16 22:55:40