如何从链表中删除第一个元素?

How to remove first element from the Linked List?

我正在尝试从 LinkedList 中删除第一个元素。下面是两个选项。我只能看到一个作品,但另一个作品在我的 eclipse 中看到编译错误 -

第一种方法: 这工作正常

LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();

第二种方法 在此,我在 eclipse 中遇到编译错误,如 -

The method removeFirst() is undefined for the type List

List<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();

以上两者有什么区别?为什么第一个有效但第二个无效?

此外,从 Java 中的链表中删除第一个元素的最有效方法是什么?我需要在我的 LinkedList 上更频繁地执行此操作。

因为 removeFirst 是由 class LinkedList 中接口 List 的确切实现定义的方法,而不是在 LinkedList 中定义的方法的一部分界面。如果您将对象 LinkedList 保存在类型 List 的更通用的变量中,那么您可以使用接口 List 知道的所有方法,removeFirst 不属于.

LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();

有效,因为您正在创建 [LinkedList][1] 的对象并且它有方法 removeFirst(),所以没问题。


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

您正在将 LinkedList 向上转换为 List。哪个好因为 它的优点是 List 的实现可以更改(例如更改为 ArrayList),而不会影响其余代码。

但是在你的代码 servers.removeFirst(); 中,如果只有 LinkedList class 的一部分,而不是 List 的一部分,这就是你遇到问题的原因。

如果您想第二次使用以下代码:

List<String> servers = new LinkedList<String>();
....
if(servers instanceof LinkedList){
 ((LinkedList)servers).removeFirst();
}

removeFirst() 是为实现 ListLinkedList 定义的,但未在 interface List 中定义。在第一种方法中它起作用是因为服务器被定义为 LinkedList。在第二种方法中,它无法工作,因为服务器可以是任何 List,例如 ArrayList,其中 removeFirst() 未定义。

LinkedList 实现了List 接口。在 List 接口 removeFirst(0 方法未定义。removeFirst() 仅在 LinkedList class 中定义和实现。因此当您创建对象时

列表<>列表=新链表<>();

然后列表将只访问那些在列表接口中声明的方法。 因此您无法使用 list.

访问 removeFirst()

如果您需要 LinkedList 的所有方法,则使用以下格式:

LinkedList<> lList = new LinkedList<>();

import java.util.*;

public class MyClass
{
    public static void main(String[] args)
    {
        // Create a linked list object:
        LinkedList lList =  new LinkedList();

        // Add some elements:
        lList.add("Isabella");
        lList.add("Angelina");
        lList.add("Pille");
        lList.add("Anabella");

        // Display the elements:
        System.out.println("The old list:");
        for (int i=0; i<lList.size(); i++)
            System.out.println(i + " = " + lList.get(i));

        // Remove the first element:
           System.out.println(
                  "\nThe following element has been removed: "
                  + lList.removeFirst());

        // Display the new elements:
        System.out.println("\nThe new list:");
        for (int i=0; i<lList.size(); i++)
            System.out.println(i + " = " + lList.get(i));
    }
}

在第二种方法中,如果您必须对 List 使用 LinkedList 的 removeFirst() 方法,则必须按如下方式转换列表:

List<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();

其他实现相同可以使用 remove() 方法

servers.remove(0);