TreeSet.lower() 方法在使用显式比较器构造函数时未返回所需的输出

TreeSet.lower() Method is not returning required output while using explicit comparator constructor

我正在使用显式比较器来允许 TreeSet 中的重复值。在使用 TreeSet.lower() 方法为给定值提取精确的较低值时,我得到的输出与给定值相同(TreeSet.lower() 方法中的参数)

import java.util.*;
public class GFG {
    public static void main(String args[])
    {
        TreeSet<Integer> tree = new TreeSet<Integer>(new Comparator<Integer>(){
            @Override
            public int compare(Integer a, Integer b){
                if(a >= b){
                    return 1;
                }else{
                    return -1;
                }
            }
            
        });

        // Add elements to this TreeSet
        tree.add(9);
        tree.add(5);
        tree.add(8);
        tree.add(1);
        tree.add(11);
        tree.add(3);

        System.out.println(tree.lower(11));
    }
}

此处 tree.lower(11) 返回 11 而不是 9。

lower 的定义中,您发现 严格小于给定元素 。 returns 1 strictly less 的比较器。您的比较器 returns 1 也适用于平等。因此,TreeSet 将 equality 视为 strictly less,因此 - 给定你的比较器 - 11 严格小于 11.

作为替代方案,如果您想存储重复项,您可以使用 SortedList 而不是 TreeSet