【发布时间】:2022-01-10 15:41:03
【问题描述】:
问题(Java 集合中没有重复的二叉树)。
我需要一个有重复项的二叉树,我需要 O(Log(n)) 的搜索和插入复杂度,同时保持顺序(所以我不能使用哈希表),java 没有实现的集合二叉树并允许重复,同时保留所有二叉树操作。
我们可以使用 TreeSet 来做到这一点吗?
我正在尝试调整 TreeSet 并通过传递一个永不返回 0 的比较器来允许重复。我知道这将不再是一个集合,但没关系,我需要重复。
例子
TreeSet<Integer> binaryTreeWithDuplicates = new TreeSet<Integer>((x, y) -> x>y?1:-1);
这样的实现和使用会产生不良的副作用吗?
因为我们显然违反了comparator api 中的规则,比如签名规则。
【问题讨论】:
-
Set 不能有重复项,因此您不需要 Set。我建议使用列表,并始终使用Collections.binarySearch 对列表进行排序,以确定每个新元素的插入点。 (您也可以频繁地对整个 List 进行排序,但这样做效果会很差。)
-
@Progman 我修改了问题,指定了 X,然后讨论了可能的 Y,同时询问了这样的 Y 的副作用。(有关 xy 问题的更多信息xyproblem.info .thanks btw that内容丰富)
标签: java binary-tree comparator treeset