msi*_*ver 7 java comparison linked-list
我有两个始终具有相同大小的LinkedList对象.我想比较它们,看看它们的内容是否相同.为每个列表创建ListIterator并使用while hasNext循环与使用计数器(int i)并使用linkedlist.get(i)从0迭代到linkedlist.size()来获取和比较的一般性能和样式含义是什么?价值?有没有更好的方式让我俯瞰?
我唯一能想到的是ListIterator方法可能更好,因为我以后可以更容易地交换另一个Comparable列表(而不是我计划它).我不知道两者在引擎盖下是什么样的,所以我不确定如何比较它们的性能.
事实证明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());
}
Run Code Online (Sandbox Code Playgroud)
所以不要重新发明轮子.
最后一点说明:不要get(index)用来迭代a LinkedList.它是O(n)访问(对于ArrayLista 来说是O(1))所以LinkedList遍历使用get(index)将是O(n 2).
随机访问LinkedList具有可怕的性能(它需要从一端开始并next重复调用或类似),因此ListIterator会更快.