2015-04-07 176 views
1

我想从LinkedList中移除第一个元素。以下是两种选择。我只能看到一个作品,但与其他我看到编译错误,在我的日食 -如何从链接列表中删除第一个元素?

第一种方法: 这工作得很好

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

第二种方法 在这方面,我得到的编译错误在我的Eclipse作为 -

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

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

以上两者有什么区别?为什么第一个人能工作,但不是第二个人?

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

回答

1

removeFirst()LinkedList它实现List定义,但它不是在interfaceList定义。在第一种方法中,它的工作原理是服务器定义为LinkedList。在第二种方法中,它无法工作,因为服务器可能是任何List,例如ArrayList,其中removeFirst()未定义。

0

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

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

工作,因为你正在创建的[LinkedList][1]对象,它有方法removeFirst()所以没有问题。


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

尤尔被向上转型LinkedListList。这是很好的,因为 它具有的优点是List的实现可以更改(例如ArrayList),而不会影响其余的代码。

但在你的代码servers.removeFirst();如果只有一部分LinkedList类其不是List的一部分,那为什么你会得到问题。

如果你想你的第二个使用下面的代码:

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

LinkedList实现List接口。在List接口中,removeFirst(0方法不是定义的。removeFirst()仅在LinkedList类中定义和实现。所以当你创建对象像

列表<> list = new LinkedList <>();

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

如果需要链表的所有方法然后用于下面的格式:

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

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)); 
    } 
} 
0
在第二种方法

如果u有使用链表的removeFirst()方法列表,我只好演员名单如下:

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

别人达到同样可以使用删除()方法

servers.remove(0);