簡體   English   中英

如何從鏈接列表中刪除第一個元素?

[英]How to remove first element from the 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上更頻繁地執行此操作。

removeFirst()是為實現List LinkedList定義的,但未在List interface定義。 在第一種方法中,它有效,因為服務器被定義為LinkedList 在第二種方法中,它無法工作,因為服務器可以是任何List (例如,未定義removeFirst() ArrayList removeFirst()

因為removeFirst是由LinkedList類中的接口List的確切實現定義的方法,而不是接口中定義的方法的一部分。 如果將對象LinkedList保存在類型為List的更通用的變量中,則可以使用接口List確實知道的所有方法,而removeFirst不屬於該方法。

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

LinkedList實現List接口。 在List接口中,removeFirst(0方法未定義。removeFirst()僅在LinkedList類中定義和實現。

List <> list = new LinkedList <>();

然后list將僅訪問在List Interface中聲明的那些方法。 因此您無法使用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));
    }
}

在第二種方法中,如果您必須對列表使用LinkedList的removeFirst()方法,則必須按以下方式強制轉換列表:

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

否則,可以使用remove()方法

servers.remove(0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM