![](/img/trans.png)
[英]How to remove elements from a LinkedList in Java? How to set the first element to be the head of the Linked List in Java?
[英]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>();
您正在將LinkedList
為List
。 這樣做很好,因為它的優點是可以更改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.