链表的一般使用

General use of Linked List

我知道您可以创建自己的链接列表 class 或使用 java.util 导入一个。 像这样:

import java.util.*;  

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

然后用现有的方法对列表做一些事情,比如添加、获取、设置... 但是你也可以像那样创建你自己的链表:

class LinkedList {
Node head; // head of list


class Node {
    int data;
    Node next;

    Node(int d) { data = d; }
}
}

但如果您这样做,则需要创建所有方法。 我的问题很简单,我应该使用方法 1 还是方法 2?如果两者都很好,什么时候使用一个比另一个更好。

除非您需要现有轮子无法提供的极其具体的东西,否则不要重新发明轮子。

此外,可能值得一提的是,链表具有较差的性能特征,因为它们占用的内存不连续,导致从主内存中多次读取 (link)。

如果您需要通用 List,请使用 java.util.LinkedList。它是一个标准 class,成熟,经过良好测试,几乎所有 Java 开发人员都能很好地理解...而且,当然,它很简洁,因为您不必实施它。

实际上,不要使用它:使用 java.util.ArrayListjava.util.ArrayDeque,它们几乎在所有情况下都优于 LinkedList。参见 When to use LinkedList over ArrayList in Java?

如果你真的需要更专业的东西,实现你自己的,但前提是你真的,真的需要它。

仅在您确实需要时才实施 class 实施 java.util.List

避免必须在接口中实现“一切”的一个很好的起点是扩展 java.util.AbstractList:这只需要您提供 get(int)size() 和,如果您希望列表是可修改的,set(int, E)(您可能希望覆盖其他列表以获得更好的链接列表性能)。