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

Java 如何从链表中删除第一个元素?,java,linked-list,Java,Linked List,我正在尝试从LinkedList中删除第一个元素。下面是两个选项。我只能看到一种工作方式,但在eclipse中看到另一种工作方式的编译错误- 第一种方法: 这个很好用 LinkedList<String> servers = new LinkedList<String>(); .... String firstServerName = servers.removeFirst(); LinkedList服务器=新建LinkedList(); .... 字符串firstSe

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

第一种方法: 这个很好用

LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
LinkedList服务器=新建LinkedList();
....
字符串firstServerName=servers.removeFirst();
第二种方法 在这里,我在eclipse中得到的编译错误为-

类型列表中未定义removeFirst()方法

List servers=newlinkedlist();
....
字符串firstServerName=servers.removeFirst();
以上两者有什么区别?为什么第一个有效而第二个无效


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

因为
removeFirst
是由类
LinkedList
中接口
列表
的精确实现定义的方法,并且不是接口中定义的方法的一部分。如果要将对象
链接列表
保存在类型为
列表
的更通用变量中,则允许使用接口
列表
知道的所有方法,而
removeFirst
不属于这些方法

LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
您正在向上转换
链接列表
列表
。这很好,因为 它的优点是列表的实现可以更改(例如更改为ArrayList),而不会影响代码的其余部分

但是在您的代码中
servers.removeFirst()
如果只是
链接列表
类的一部分,那么它就不是
列表
的一部分,这就是您遇到问题的原因

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

List<String> servers = new LinkedList<String>();
....
if(servers instanceof LinkedList){
 ((LinkedList)servers).removeFirst();
}
List servers=newlinkedlist();
....
if(LinkedList的服务器实例){
((LinkedList)服务器);
}

removeFirst()
是为实现
List
链接列表定义的,但未在
界面中定义。在第一种方法中,它是有效的,因为服务器被定义为
LinkedList
。在第二种方法中,它无法工作,因为服务器可以是任何
列表
,例如
ArrayList
,其中未定义
removeFirst()

LinkedList实现列表接口。在列表接口中,removeFirst(0)方法不是define。removeFirst()仅在LinkedList类中定义和实现

列表=新建LinkedList()

然后list将只访问在list接口中声明的那个些方法。 因此,无法使用列表访问removeFirst()

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

LinkedList lList=新建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));
    }
}
import java.util.*;
公共类MyClass
{
公共静态void main(字符串[]args)
{
//创建链接列表对象:
LinkedList lList=新LinkedList();
//添加一些元素:
加上(“伊莎贝拉”);
添加(“安吉丽娜”);
添加(“皮勒”);
添加(“安娜贝拉”);
//显示元素:
System.out.println(“旧列表:”);

对于(int i=0;i,在第二种方法中,如果必须对List使用LinkedList的removeFirst()方法,则必须按如下方式强制转换List:

List<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();
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<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();
servers.remove(0);