在Java中声明LinkedList

时间:2012-03-23 17:58:53

标签: java list collections linked-list

我总是在我们声明我们应该做的集合时学习Interface ob = new Class(),如果我想使用例如LinkedList我会做List ob = new LinkedList(),但是我无法访问所有来自LinkedList的方法.. LinkedList ob = new LinkedList() 100%是否正确?

11 个答案:

答案 0 :(得分:11)

  

不是LinkedList ob = new LinkedList()100%正确吗?

我建议使用通用表单,但是确定 - 如果你想使用特定LinkedList的功能,你需要相应地声明变量。

您可能想要检查Deque<E>Queue<E>接口是否具有您想要的功能。如果他们这样做,请使用那些与描述您需要的内容相符的内容,而不是您将使用的实现。

答案 1 :(得分:6)

是,

LinkedList<...> items = new LinkedList<...>();
如果您知道items将取决于LinkedList<T>界面中未捕获的List<T>方法,则

完全正确。

答案 2 :(得分:4)

您应该始终尝试将声明保持在最高级别可能,这意味着您应该停留在提供所需功能的最高级别:如果List方法是不够,你对LinkedList声明完全没问题。

答案 3 :(得分:3)

规则“始终代码接口”必须具有一定的灵活性。你的建议是好的,当你得出结论时,唯一的选择。

作为旁注,对大多数JVM来说,编写像这样的具体类更快。决定表现是否值得违反规则是很难决定的。

答案 4 :(得分:3)

如果您确实需要使用List接口上没有的方法,那么使用LinkedList的API肯定没有问题。对List接口进行编程的一般规则认识到:1)很少需要这些方法,2)在大多数人的经验中,我更有可能发现我需要对列表进行排序和/或使用大量随机访问,并决定切换到ArrayList,而不是我需要的方法之一,只有LinkedList具有。

如果您发现List没有为您提供所需内容,也可能是您正在编程到Queue界面。

答案 5 :(得分:2)

LinkedList是通用的。你应该这样做:

LinkedList<String> linkedList = new LinkedList<String>();

(或者你需要在那里存储的任何其他东西而不是String)

答案 6 :(得分:1)

不完全正确100%。

声明任何集合的首选方法是包含它所持有的数据类型。因此,对于您的示例,它是LinkedList<Integer> ob = new LinkedList<Integer>();

答案 7 :(得分:1)

没有..这是错误的,如果他想将他的实现从链表更改为列表类型的任何其他实现,他将会出错...这样做是错误的...所以最好使用接口级别声明。

答案 8 :(得分:0)

我不会总是建议你使用泛型...... 因为有时您可能需要将不同的对象包装在这里....

          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;
             .
             .
             .
       }

现在某处你需要传递物品.... 您可以执行以下操作....

             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......

答案 9 :(得分:0)

你仍然可以使用List访问LinkedList方法,你所要做的就是输入cast 例如

((LinkedList)ob).add()

使用通用List而不是LinkedList是因为如果你只是改变你正在使用的列表类型(比如说双链表)你的程序仍然可以工作Generics是为了简化你的代码以便更轻松和更多“可改变”

答案 10 :(得分:-2)

实际上,如果将它们作为原始类型进行参数化会更好。