Java TreeSet存储Pair元素时同值不同键元素无法插入的解决方法
问题解决:TreeSet存储Pair时同value不同key元素无法插入的处理
问题原因
你当前使用的TreeSet比较器仅对比Pair的value值,当两个Pair的value相等时,比较器返回0。TreeSet会将返回0的元素判定为重复元素,因此拒绝插入同value但不同key的Pair。
解决方案
修改Comparator逻辑,先按value降序排序,当value相等时再对比key值,确保不同key的元素不会被判定为重复。示例代码如下:
TreeSet<Pair<Integer, Integer>> sortedSet = new TreeSet<>((a, b) -> { // 优先按value降序排序 int valueCompare = b.getValue() - a.getValue(); if (valueCompare != 0) { return valueCompare; } // value相等时,按key升序排序(可根据需求改为降序:b.getKey() - a.getKey()) return a.getKey() - b.getKey(); });
逻辑说明
- 当两个Pair的
value不同时,按value降序排列,符合初始需求; - 当
value相同时,通过key的差值返回非0结果,TreeSet会将其视为不同元素完成插入,同时保证同value的元素按key有序排列。
内容的提问来源于stack exchange,提问作者Catalina
相关产品推荐
相关产品推荐

