我想实现以下但是使用List而不是数组(根据数组中相邻元素之间的比较删除一些元素)
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集合迭代或Google Collections迭代器的集合,情况有点不同。从列表中删除项目。
ListIterator,Apache和Google都有.previous或.peek方法,可以提供一些允许&#34;展望未来的方法。 for循环示例中显示的功能。但是如果除了.remove()之外还使用它们,如果.previous或.peek在.remove()之前被调用,那么前一项将被删除,并且没有办法指定你必须调用的.remove(index)。 next()。next在某些情况下,并管理返回到每次迭代后迭代器的位置。
在这种情况下,Steams不会工作,因为我们无法根据List中的其他元素进行过滤,即我们无法获得&#34; next&#34;在蒸汽里。我还想避免制作数据的临时副本并在之后删除数据。
实现所需功能的最佳方法是什么?
答案 0 :(得分:0)
您可以像数组一样使用List,创建循环并使用方法get(int index)和remove(int index)来访问/删除列表中的元素。您只需在删除元素时跟踪索引。为避免这种情况,您可以从列表末尾开始,然后开始工作:
for (int i=intervals.length-1; i>=0; i--)