我总是会学习何时声明一个我们应该做的集合,如果我想用例如一个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