gpt4 book ai didi

java - 将两个 LinkedList 与 ListIterator 与 for 循环和 get(int index) 进行比较

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:11:08 24 4
gpt4 key购买 nike

我有两个始终具有相同大小的 LinkedList 对象。我想比较它们,看看它们的内容是否相同。为每个列表创建 ListIterator 并使用 while hasNext 循环与使用计数器 (int i) 并使用 linkedlist.get(i) 从 0 迭代到 linkedlist.size() 获取和比较的一般性能和样式含义是什么值(value)?有没有我忽略的更好方法?

我唯一能想到的是 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());
}

所以不要重新发明轮子。

最后一点:不要使用 get(index) 来迭代 LinkedList。它是 O(n) 访问(ArrayList 的 O(1))所以使用 get(index)LinkedList 遍历将是 O(n 2).

关于java - 将两个 LinkedList<String> 与 ListIterator 与 for 循环和 get(int index) 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2323497/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com