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