为什么LinkedList可以分配给List变量?

时间:2012-12-03 21:07:00

标签: java oop

我对LinkedList感到困惑。它们对我来说真的没有意义。有人可以向我解释它是如何运作的。例如,我看到了这个代码(下面),它对我没有意义。从我猜测的是,创建了一个字符串列表(list1)并将其放入LinkedList中。但是list和LinkedList之间的差异是什么?感谢

List<String>list1 = new LinkedList<String>() 

5 个答案:

答案 0 :(得分:2)

LinkedList是一个实现List接口的类。接口不是实际的类,它更像是实现它们的类需要公开的方法的约定/蓝图。

例如,如果您有名为Shape

的界面
interface Shape() {
     public void draw(); 
}

注意这包含了一个draw方法体,相反,它的一个约定是所有实现此接口的类必须有一个名为draw的方法。现在,假设你有两个类都实现了上面的接口

class Box implements Shape {
    public void draw() {
        //do actual drawing in this method body
    }
}

class Circle implements Shape {
    public void draw() {
        //do actual drawing in this method body
    }
}

然后,您可以将Circle或Box的实例转换为Shape变量,并安全地调用draw方法。

答案 1 :(得分:2)

此行为列表界面分配一个空LinkedList对象以包含String 列表界面的想法是,您稍后可以通过LinkedList更换ArrayList以更改代码的其余部分

E.g:

List<String> list1 = new ArrayList<String>();

list.add("element1");

list.add()适用于ArrayListLinkedList两者,这就是List Interface的目的

答案 2 :(得分:1)

java.util.List是一个接口,java.util.LinkedList是实现List interface的类。

List<String>list1 = new LinkedList<String>();
SuperClass(Class or interface) ref= new SubClass(Implementing class/concrete class)

以上是多态方式来创建LinkedList。

以下是List的一些特征:

  1. 接受重复
  2. 可以使用索引进行访问。
  3. 维护广告订单

答案 3 :(得分:1)

LinkiedList实现List接口,因此LinkedList是List。

这是LinkedList类的定义:

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable

如您所见,LinkedList class实现了List接口。

因此,由于LinkedList是List(或者不完全是List bot的子代),因此您可以使用多态来实例化List对象,就像您所说的那样。 List接口说明实现此接口的类的行为,在本例中为LinkedList。请记住,接口就像是一个契约,所以A * LL确定的方法 * LinkedList class中的列表界面必须实现。这样,List接口与LinkedList类具有相同的方法。

答案 4 :(得分:0)

我认为令人困惑的是使用泛型。

这里没有泛型:

List list1 = new LinkedList();

这是非常简单的Java代码。我们正在创建一个LinkedList对象并将其分配给List类型的变量。 LinkedList实现了List接口,因此可以正常工作。

现在让我们添加泛型:

List<String>list1 = new LinkedList<String>();

所有不同之处在于您要指定LinkedList将包含的内容。

在列表中添加内容:

list1.add("Something in my linked list");