[英]Remove element n from Java List dependent on n + 1 element
我想用列表而不是數組來實現以下目的(根據數組中相鄰元素之間的比較刪除一些元素)
Interval: {
start,
end,
priority;
}
Interval[] intervals = someIntervalsSortedByStartTime();//[(1,5), (4, 5)]
for(int i=0; i<intervals.length-1; i++){
if(intervals[i] == null) continue;
if((intervals[i].end > intervals[i+1].start) ){
if(intervals[i].priority < intervals[i+1].priority){
intervals[i] = null //i.e. have the element removed.
}else if(intervals[i].priority > intervals[i+1].priority{
itervals[i+1] = null;
}else{
throw new WTFException();
}
}
}
我知道對於集合而言,我們需要使用Iterator,ListIterator,Apache collections Iteration或Google Collections Iterator有點不同。 從列表中刪除一個項目。
ListIterator,Apache和Google具有.previous或.peek方法,可以使用一些允許for循環示例中所示的“向前看”功能的方法。 但是,如果您在.remove()之前最后調用.previous或.peek時,除了.remove()之外還使用它們,則前一個項目將被刪除,並且沒有一種方法可以指定.remove(index),您必須調用。在某些情況下,使用next()。next並設法返回到每次迭代后希望迭代器位於的位置。
在這種情況下,Steam無法正常工作,因為我們無法基於列表中的其他元素進行過濾,即我們無法在Steam中獲得“下一個”。
我還想避免對數據進行臨時復制,然后再刪除數據。
實現所需功能的最佳方法是什么?
您可以像數組一樣使用List,創建循環並使用get(int index)和remove(int index)方法訪問/刪除列表中的Elements。 刪除元素時,只需跟蹤索引。 為避免這種情況,您可以從列表的末尾開始,然后從頭開始:
for (int i=intervals.length-1; i>=0; i--)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.