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

时间:2015-04-07 06:40:17

标签: java linked-list

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

第一种方法: 这很好用

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

第二种方法 在这里,我在我的日食中得到了编译错误 -

  

对于List

类型,未定义removeFirst()方法
List<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();

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

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

5 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

因为removeFirst是由类List中接口LinkedList的确切实现定义的方法,并且不是接口中定义的方法的一部分。如果要将对象LinkedList保存在List类型的更通用变量中,则允许您使用接口List知道的所有方法,{{1} }不属于。

答案 2 :(得分:0)

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类的一部分不属于List那么你会遇到问题。

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

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

答案 3 :(得分:0)

LinkedList实现List接口。在List接口中,removeFirst(0方法未定义.removeFirst()仅在LinkedList类中定义和实现。所以在创建Object时

列表与LT;&GT; list = new LinkedList&lt;&gt;();

然后list将只访问List Interface中声明的那些方法。 因此您无法使用list访问removeFirst()。

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

<强>链表&LT;&GT; lList = new LinkedList&lt;&gt;();

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));
    }
}

答案 4 :(得分:0)

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

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

否则实现相同可以使用remove()方法

servers.remove(0);