如何从链表中删除第一个元素?
How to remove first element from the Linked List?
我正在尝试从 LinkedList 中删除第一个元素。下面是两个选项。我只能看到一个作品,但另一个作品在我的 eclipse 中看到编译错误 -
第一种方法:
这工作正常
LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
第二种方法
在此,我在 eclipse 中遇到编译错误,如 -
The method removeFirst() is undefined for the type List
List<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
以上两者有什么区别?为什么第一个有效但第二个无效?
此外,从 Java 中的链表中删除第一个元素的最有效方法是什么?我需要在我的 LinkedList 上更频繁地执行此操作。
因为 removeFirst
是由 class LinkedList
中接口 List
的确切实现定义的方法,而不是在 LinkedList
中定义的方法的一部分界面。如果您将对象 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
class 的一部分,而不是 List
的一部分,这就是你遇到问题的原因。
如果您想第二次使用以下代码:
List<String> servers = new LinkedList<String>();
....
if(servers instanceof LinkedList){
((LinkedList)servers).removeFirst();
}
removeFirst()
是为实现 List
的 LinkedList
定义的,但未在 interface
List
中定义。在第一种方法中它起作用是因为服务器被定义为 LinkedList
。在第二种方法中,它无法工作,因为服务器可以是任何 List
,例如 ArrayList
,其中 removeFirst()
未定义。
LinkedList 实现了List 接口。在 List 接口 removeFirst(0 方法未定义。removeFirst() 仅在 LinkedList class 中定义和实现。因此当您创建对象时
列表<>列表=新链表<>();
然后列表将只访问那些在列表接口中声明的方法。
因此您无法使用 list.
访问 removeFirst()
如果您需要 LinkedList 的所有方法,则使用以下格式:
LinkedList<> lList = new 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));
}
}
在第二种方法中,如果您必须对 List 使用 LinkedList 的 removeFirst() 方法,则必须按如下方式转换列表:
List<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();
其他实现相同可以使用 remove() 方法
servers.remove(0);
我正在尝试从 LinkedList 中删除第一个元素。下面是两个选项。我只能看到一个作品,但另一个作品在我的 eclipse 中看到编译错误 -
第一种方法: 这工作正常
LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
第二种方法 在此,我在 eclipse 中遇到编译错误,如 -
The method removeFirst() is undefined for the type List
List<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
以上两者有什么区别?为什么第一个有效但第二个无效?
此外,从 Java 中的链表中删除第一个元素的最有效方法是什么?我需要在我的 LinkedList 上更频繁地执行此操作。
因为 removeFirst
是由 class LinkedList
中接口 List
的确切实现定义的方法,而不是在 LinkedList
中定义的方法的一部分界面。如果您将对象 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
class 的一部分,而不是 List
的一部分,这就是你遇到问题的原因。
如果您想第二次使用以下代码:
List<String> servers = new LinkedList<String>();
....
if(servers instanceof LinkedList){
((LinkedList)servers).removeFirst();
}
removeFirst()
是为实现 List
的 LinkedList
定义的,但未在 interface
List
中定义。在第一种方法中它起作用是因为服务器被定义为 LinkedList
。在第二种方法中,它无法工作,因为服务器可以是任何 List
,例如 ArrayList
,其中 removeFirst()
未定义。
LinkedList 实现了List 接口。在 List 接口 removeFirst(0 方法未定义。removeFirst() 仅在 LinkedList class 中定义和实现。因此当您创建对象时
列表<>列表=新链表<>();
然后列表将只访问那些在列表接口中声明的方法。 因此您无法使用 list.
访问 removeFirst()如果您需要 LinkedList 的所有方法,则使用以下格式:
LinkedList<> lList = new 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));
}
}
在第二种方法中,如果您必须对 List 使用 LinkedList 的 removeFirst() 方法,则必须按如下方式转换列表:
List<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();
其他实现相同可以使用 remove() 方法
servers.remove(0);