[英]Is it possible to change the counter variable inside a for loop?
我正在尝试对Java中的LinkedList
进行排序。 我需要mylist
我的mylist
。 列表中的元素是我的类CustomElement
中的对象。 如果它们匹配某个模式,我想将它们放在前面。
我的问题是,例如,如果我检测到索引为5的列表中的元素与我的模式匹配,然后将其移至索引0,则索引为4的前一个元素现在的索引为5,对吗? 这就是为什么我希望for循环再次检查索引为5的元素: i++
。 但这导致了无限循环,没有i++
该方法的工作正常,但不是我想要的方式,因为它跳过了索引为4(现在为5)的元素。
从总体上来说,可以在for循环内引发变量i
吗? 如果是,我在做什么错。
for (int i = mylist.size() - 1; i >= 0; i--) {
if (mylist.get(i) matches a certain pattern) {
CustomElement helper = mylist.get(i);
mylist.remove(i);
mylist.add(0, helper);
i++;
}
}
是的,可以在for循环中修改i
,如果不可能的话,则不会获得无限循环。
必须发生的情况是,如果(mylist.get(i) matches a certain pattern)
在某一点之后仍然为真,并且您永远都不会到达i >= 0
不为真的点。
因此,如果myList.get(0)
与您的模式匹配,则只需将其放回索引0
,并一直进行检查。
是的,但是在您的情况下,将get(i)用于链表将提供二次性能。
如果您不介意将“匹配”项按顺序颠倒,那么最好创建一个新列表:
final LinkedList<CustomElement> newList = new LinkedList<> ();
for (final CustomElement e: myList)
{
if (e matches your pattern) { newList.addFirst (e); }
else { newList.addLast (e); }
}
myList = newList;
然后索引变量的所有问题都消失了...
(在修改现有列表的同时,您还可以实现线性性能,但这要复杂一些。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.