java - Java 排序数据结构,允许以对数时间删除某个范围内的值
问题描述
我想知道Java内置库中是否有一个接口,它实现了一个有序的数据结构并支持在一定范围内删除。例如,如果我们调用数据结构 S(假设是整数),我希望能够搜索并删除 S 的子集 Q 使得 Q 包含 S 中范围 [start, end ] 在 O(|Q| log |S|) 时间内。
我知道在 C++ 中,Set 接口有一个擦除方法,但 Java 的 TreeSet 似乎没有类似的东西。任何人都可以帮忙吗?谢谢!
解决方案
SortedSet.subSet
返回一个视图,然后您可以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]
( 的文档SortedSet
描述了如何将 的边界subSet
分别修改为独占和包含,至少对于String
)。
推荐阅读
- python - 如何使用python提取上传到jupyter文件的文件名?
- c - 如何在阻止读取时检测 USB 断开连接?
- salesforce - 如何连接多个字段中存在的值并将其显示为目标字段中的单个值
- javascript - 将链接标记转换为链接
- unity3d - Unity 2D - 动画大幅降低 FPS
- php - 在 Woocommerce 中完成订单状态后保留自定义用户角色
- php - 连接 MySQL 失败:服务器向客户端发送未知字符集。请向开发人员报告 - SamplePage.php
- javascript - TypeScript 中最初未定义的变量的正确类型是什么?
- node.js - Swagger-ui 2.0 路径没有从顶部获得承载授权
- javascript - 当我包含完美的滚动条时,导航抽屉在短时间内可见