gpt4 book ai didi

java - 从 Java List 中删除依赖于 n + 1 元素的元素 n

转载 作者:太空宇宙 更新时间:2023-11-04 10:52:27 24 4
gpt4 key购买 nike

我想实现以下目标,但使用列表而不是数组(根据数组中相邻元素之间的比较删除一些元素)

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 方法,可以实现 for 循环示例中所示的“前瞻”功能。但是,如果除了 .remove() 之外还使用它们,如果 .previous 或 .peek 在 .remove() 之前最后一次调用,则前一项将被删除,并且无法指定 .remove(index) 在某些情况下,您必须调用 .next().next 并在每次迭代后设法返回到您希望迭代器所在的位置。

在这种情况下,Steam 也无法工作,因为我们无法根据列表中的其他元素进行过滤,即我们无法在 steam 中获得“下一个”。

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

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

最佳答案

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

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

关于java - 从 Java List 中删除依赖于 n + 1 元素的元素 n,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47650731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com