我正在尝试从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上更频繁地执行此操作。
答案 0 :(得分:1)
removeFirst()
是为实现LinkedList
的{{1}}定义的,但未在List
interface
中定义。在第一种方法中它起作用,因为服务器被定义为List
。在第二种方法中它无法工作,因为服务器可以是任何LinkedList
,例如List
,其中ArrayList
未定义。
答案 1 :(得分:0)
因为removeFirst
是由类List
中接口LinkedList
的确切实现定义的方法,并且不是接口中定义的方法的一部分。如果要将对象LinkedList
保存在List
类型的更通用变量中,则允许您使用接口List
知道的所有方法,{{1} }不属于。
答案 2 :(得分:0)
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();
}
答案 3 :(得分:0)
LinkedList实现List接口。在List接口中,removeFirst(0方法未定义.removeFirst()仅在LinkedList类中定义和实现。所以在创建Object时
列表与LT;&GT; list = new LinkedList&lt;&gt;();
然后list将只访问List Interface中声明的那些方法。 因此您无法使用list访问removeFirst()。
如果您需要LinkedList的所有方法,则使用以下格式:
<强>链表&LT;&GT; lList = new LinkedList&lt;&gt;();
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));
}
}
答案 4 :(得分:0)
在第二种方法中,如果你必须使用LinkedList for List的removeFirst()方法,你必须按如下方式转换列表:
List<String> servers = new LinkedList<String>();
((LinkedList<String>) servers).removeFirst();
否则实现相同可以使用remove()方法
servers.remove(0);