Java排序数据结构,允许对数时间删除范围内的值

Java排序数据结构,允许对数时间删除范围内的值,java,algorithm,data-structures,set,Java,Algorithm,Data Structures,Set,我想知道Java内置库中是否有一个接口实现了一个有序的数据结构,并支持在一定范围内删除。例如,如果我们调用数据结构S(比如整数),我希望能够搜索并删除S的子集Q,这样Q由O(| Q | log | S |)时间内[start,end]范围内S中的所有元素组成 我知道C++中有一个擦除方法给SET接口,但是它看起来不像java的树集有类似的东西。有人能帮忙吗?谢谢 返回一个视图,然后可以clear() 例如: TreeSet<String> set = new TreeSet<&

我想知道Java内置库中是否有一个接口实现了一个有序的数据结构,并支持在一定范围内删除。例如,如果我们调用数据结构S(比如整数),我希望能够搜索并删除S的子集Q,这样Q由O(| Q | log | S |)时间内[start,end]范围内S中的所有元素组成

<>我知道C++中有一个擦除方法给SET接口,但是它看起来不像java的树集有类似的东西。有人能帮忙吗?谢谢

返回一个视图,然后可以
clear()

例如:

TreeSet<String> set = new TreeSet<>(Arrays.asList("A", "B", "C", "D", "E"));
System.out.println(set);  //  [A, B, C, D, E]
set.subSet("B", "D").clear(); // Inclusive of B, exclusive of D.
System.out.println(set);  //  [A, D, E]
TreeSet set=newtreeset(Arrays.asList(“A”、“B”、“C”、“D”、“E”));
系统输出打印项次(设置);//[A、B、C、D、E]
set.subSet(“B”,“D”).clear();//包括B,不包括D。
系统输出打印项次(设置);//[A、D、E]
(的文档描述了如何分别将
子集
的边界修改为独占和包含,至少对于
字符串
)。

返回一个视图,然后可以
清除()

例如:

TreeSet<String> set = new TreeSet<>(Arrays.asList("A", "B", "C", "D", "E"));
System.out.println(set);  //  [A, B, C, D, E]
set.subSet("B", "D").clear(); // Inclusive of B, exclusive of D.
System.out.println(set);  //  [A, D, E]
TreeSet set=newtreeset(Arrays.asList(“A”、“B”、“C”、“D”、“E”));
系统输出打印项次(设置);//[A、B、C、D、E]
set.subSet(“B”,“D”).clear();//包括B,不包括D。
系统输出打印项次(设置);//[A、D、E]

(的文档描述了如何分别将
子集
的边界修改为独占和包含,至少对于
字符串
)。

我不知道有任何接口/库,但您可以尝试使用类似直方图的结构

例如,假设我们知道我们的结构只包含
min
max
之间的整数。然后我们可以简单地在下面的庄园中制作一个数组

int[]hist=newint[max-min+1];
如果我们想在柱状图中添加一个数字
i
,我们可以简单地

hist[i-min]+;
数组中的每个索引表示预定义范围内的一个数字。数组中的每个值表示该范围内某个数字的出现次数

这种结构非常强大,因为它允许恒定时间的添加、删除和搜索

假设我们要删除包含范围
Q=[s,e]
中的所有元素。我们可以运行以下线性循环


for(int i=s;i我不知道有任何接口/库,但您可以尝试使用类似直方图的结构

例如,假设我们知道我们的结构只包含
min
max
之间的整数

int[]hist=newint[max-min+1];
如果我们想在柱状图中添加一个数字
i
,我们可以简单地

hist[i-min]+;
数组中的每个索引表示预定义范围内的一个数字。数组中的每个值表示该范围内某个数字的出现次数

这种结构非常强大,因为它允许恒定时间的添加、删除和搜索

假设我们要删除包含范围
Q=[s,e]
中的所有元素

for(int i=s;i