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。
我正在使用显式比较器来允许 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。