从Java List中删除元素n,取决于n + 1个元素

时间:2017-12-05 10:00:18

标签: java collections

我想实现以下但是使用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;在蒸汽里。

我还想避免制作数据的临时副本并在之后删除数据。

实现所需功能的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以像数组一样使用List,创建循环并使用方法get(int index)和remove(int index)来访问/删除列表中的元素。您只需在删除元素时跟踪索引。为避免这种情况,您可以从列表末尾开始,然后开始工作:

for (int i=intervals.length-1; i>=0; i--)