有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java使用ListIterator比较两个LinkedList<String>和for loop and get(int index)

我有两个LinkedList对象,它们的大小总是一样的。我想比较一下,看看它们的内容是否相同。为每个列表创建ListIterator并使用while hasNext循环与使用计数器(int i)并从0迭代到linkedlist相比,一般的性能和风格意味着什么。size()使用linkedlist。获取并比较这些值?有没有更好的方法让我忽略

我能想到的唯一一件事是,ListIterator方法可能会更好,因为我以后可以更容易地交换到另一个可比较的列表中(我不打算这样做)。我不知道这两个引擎盖下是什么样子,所以我不确定如何比较它们的性能


共 (2) 个答案

  1. # 1 楼答案

    随机访问LinkedList的性能非常糟糕(需要从一端开始,反复调用next或类似的功能),因此ListIterator会更快

  2. # 2 楼答案

    事实证明AbstractList.equals()(它LinkedList使用)会自动执行此操作,所以使用它。代码是:

    public boolean equals(Object o) {
      if (o == this)
        return true;
      if (!(o instanceof List))
        return false;
    
      ListIterator<E> e1 = listIterator();
      ListIterator e2 = ((List) o).listIterator();
      while (e1.hasNext() && e2.hasNext()) {
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1 == null ? o2 == null : o1.equals(o2)))
          return false;
      }
      return !(e1.hasNext() || e2.hasNext());
    }
    

    所以不要重新发明轮子

    最后一点注意:不要使用get(index)来迭代LinkedList。它是O(n)访问(O(1)用于ArrayList),所以使用get(index)LinkedList遍历将是O(n2