2015-04-07 175 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);