我对 LinkedList 感到困惑。它们对我来说真的没有意义。有人可以向我解释它基本上是如何工作的。例如,我看到了这段代码(如下),这对我来说没有意义。根据我的猜测,创建了一个字符串列表(list1)并将其放入 LinkedList 中。但是 list 和 LinkedList 之间有什么区别?谢谢
List<String>list1 = new LinkedList<String>()
LinkedList 是一个实现 List 接口的类。接口不是实际的类,它更像是实现它们的类需要公开哪些方法的约定/蓝图。
例如,如果您有名为 Shape 的接口
interface Shape() {
public void 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 方法。
这一行将一个空LinkedList
对象分配String
给 List 接口。
List 接口的想法是,您以后可以在无需更改其余代码的情况LinkedList
下进行交换ArrayList
例如:
List<String> list1 = new ArrayList<String>();
list.add("element1");
list.add() 适用于 forArrayList
和 for LinkedList
,这就是List Interface
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 的一些特征:
LinkiedList
实现 List 接口,ListLinkedList
也是如此。
这是LinkedList
类的定义:
public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, Serializable
如您所见,LinkedList
该类实现了 List 接口。
Therefore, as LinkedList
is a List (or a child of List bot not exactly), you can use polymorphism to instantiate a List object like you are saying. The List interface say the behavior of the class that implement this interface, in this case LinkedList
. Remember that the Interfaces are like a contract, so A*LL THE METHODS THAT ARE DEFINIED IN* List interface MUST BE IMPLEMENTED in the LinkedList class
. In that way List interface has the same methods as the LinkedList
class.
我认为让您感到困惑的是泛型的使用。
这里没有泛型:
List list1 = new LinkedList();
这是非常简单的 Java 代码。我们正在创建一个 LinkedList 对象并将其分配给 List 类型的变量。LinkedList 实现了 List 接口,因此可以正常工作。
现在让我们重新添加泛型:
List<String>list1 = new LinkedList<String>();
不同之处在于您指定了 LinkedList 将包含的内容。
将某些内容放入列表中:
list1.add("Something in my linked list");