簡體   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