gpt4 book ai didi

java - 如何双向迭代列表?

转载 作者:行者123 更新时间:2023-12-01 18:27:33 25 4
gpt4 key购买 nike

我有一个对象列表,想要向前和向后迭代,直到找到“有效”的元素。

MyClass {
private boolean valid;
public boolean isValid() { return valid; }
}

List<MyClass> classes; //assume sorted list

现在我想从位置 idx 开始,向前和向后迭代以找到最接近的有效元素。到目前为止,我已经让前向算法发挥作用了。但我觉得代码还可以优化:

//应该从位置X开始

int idx = 10;

//find the closest element that is valid
for (ListIterator<MyClass> itr = classes.listIterator(idx); itr.hasNext();) {
if (itr.hasNext()) {
MyClass my = itr.next();
while (!my.isValid()) {
if (itr.hasNext()) {
my = itr.next();
} else {
break;
}
}
}
Sysout("the closest valid element is: " + my);
}

迭代器算法可以写得更好吗?

最佳答案

同时使用两个迭代器。从 idx 开始,并在循环的每次迭代中推进它们,直到达到极限:

ListIterator<MyClass> fwd = classes.listIterator(idx);
ListIterator<MyClass> bck = classes.listIterator(idx);
MyClass found = null;
while (fwd.hasNext() || bck.hasPrevious()) {
if (fwd.hasNext()) {
MyClass my = fwd.next();
if (my.isValid()) {
found = my;
break;
}
}
if (bck.hasPrevious()) {
MyClass my = bck.previous();
if (my.isValid()) {
found = my;
break;
}
}
}

如果在循环结束时foundnull,则未找到有效项目。否则,found 包含最接近 idx 的项目。如果两个有效项目与idx的距离相同,则返回位于前面的项目。

关于java - 如何双向迭代列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25543738/

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