【问题标题】:How to remove first element from the Linked List?如何从链接列表中删除第一个元素?
【发布时间】:2015-04-07 17:53:34
【问题描述】:

我正在尝试从 LinkedList 中删除第一个元素。下面是两个选项。我只能看到一个工作,但另一个我在我的 Eclipse 中看到编译错误 -

第一种方法: 这很好用

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

第二种方法 在此,我的 Eclipse 中出现编译错误 -

对于 List 类型,方法 removeFirst() 未定义

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

以上两者有什么区别?为什么第一个有效,第二个无效?

还有什么是从 Java 中的链表中删除第一个元素的最有效方法?我需要在我的 LinkedList 上更频繁地执行此操作。

【问题讨论】:

    标签: java linked-list


    【解决方案1】:

    removeFirst() 是为实现ListLinkedList 定义的,但在interface List 中没有定义。在第一种方法中它可以工作,因为服务器被定义为LinkedList。在第二种方法中,它不能工作,因为服务器可以是任何List,例如ArrayList,而removeFirst() 没有定义。

    【讨论】:

      【解决方案2】:

      因为removeFirst 是在LinkedList 类中由接口List 的精确实现定义的方法,并且不是接口中定义的方法的一部分。如果您将对象LinkedList 保存在List 类型的更通用变量中,那么您可以使用接口List 知道的所有方法,而removeFirst 不是其中的一部分。

      【讨论】:

        【解决方案3】:
        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();
        }
        

        【讨论】:

          【解决方案4】:

          LinkedList 实现 List 接口。在 List 接口中 removeFirst(0 方法未定义。removeFirst() 仅在 LinkedList 类中定义和实现。所以当您创建 Object 时

          列表 list=new LinkedList();

          那么 list 将只访问那些在 List 接口中声明的方法。 因此您无法使用 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));
              }
          }
          

          【讨论】:

            【解决方案5】:

            在第二种方法中,如果你必须使用 LinkedList 的 removeFirst() 方法作为列表,你必须按如下方式转换列表:

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

            要达到同样的效果,可以使用 remove() 方法

            servers.remove(0);
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多