Java 如何从链表中删除第一个元素?
我正在尝试从LinkedList中删除第一个元素。下面是两个选项。我只能看到一种工作方式,但在eclipse中看到另一种工作方式的编译错误- 第一种方法: 这个很好用Java 如何从链表中删除第一个元素?,java,linked-list,Java,Linked List,我正在尝试从LinkedList中删除第一个元素。下面是两个选项。我只能看到一种工作方式,但在eclipse中看到另一种工作方式的编译错误- 第一种方法: 这个很好用 LinkedList<String> servers = new LinkedList<String>(); .... String firstServerName = servers.removeFirst(); LinkedList服务器=新建LinkedList(); .... 字符串firstSe
LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
LinkedList服务器=新建LinkedList();
....
字符串firstServerName=servers.removeFirst();
第二种方法
在这里,我在eclipse中得到的编译错误为-
类型列表中未定义removeFirst()方法
List servers=newlinkedlist();
....
字符串firstServerName=servers.removeFirst();
以上两者有什么区别?为什么第一个有效而第二个无效
在Java中,从链表中删除第一个元素最有效的方法是什么?我需要在我的LinkedList上更频繁地执行此操作。因为
removeFirst
是由类LinkedList
中接口列表
的精确实现定义的方法,并且不是接口中定义的方法的一部分。如果要将对象链接列表
保存在类型为列表
的更通用变量中,则允许使用接口列表
知道的所有方法,而removeFirst
不属于这些方法
LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
您正在向上转换链接列表
到列表
。这很好,因为
它的优点是列表的实现可以更改(例如更改为ArrayList),而不会影响代码的其余部分
但是在您的代码中servers.removeFirst()
如果只是链接列表
类的一部分,那么它就不是列表
的一部分,这就是您遇到问题的原因
如果您想再次使用以下代码:
List<String> servers = new LinkedList<String>();
....
if(servers instanceof LinkedList){
((LinkedList)servers).removeFirst();
}
List servers=newlinkedlist();
....
if(LinkedList的服务器实例){
((LinkedList)服务器);
}
removeFirst()
是为实现List
的链接列表定义的,但未在界面中定义。在第一种方法中,它是有效的,因为服务器被定义为LinkedList
。在第二种方法中,它无法工作,因为服务器可以是任何列表
,例如ArrayList
,其中未定义removeFirst()
。LinkedList实现列表接口。在列表接口中,removeFirst(0)方法不是define。removeFirst()仅在LinkedList类中定义和实现
列表=新建LinkedList()
然后list将只访问在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));
}
}
import java.util.*;
公共类MyClass
{
公共静态void main(字符串[]args)
{
//创建链接列表对象:
LinkedList lList=新LinkedList();
//添加一些元素:
加上(“伊莎贝拉”);
添加(“安吉丽娜”);
添加(“皮勒”);
添加(“安娜贝拉”);
//显示元素:
System.out.println(“旧列表:”);
对于(int i=0;i,在第二种方法中,如果必须对List使用LinkedList的removeFirst()方法,则必须按如下方式强制转换List:
List<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();
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<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();
servers.remove(0);