繁体   English   中英

是否可以在for循环中更改计数器变量?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM