具有比较器的树集构造函数<>参数
2022-09-01 18:12:14
在 Java 的类 TreeSet 的文档中,其中一个构造函数显示具有以下标头:
TreeSet(Comparator<? super E> c)
有人能帮助解释为什么有一个 TreeSet 的构造函数,它将比较器对象作为其参数吗?我不知道为什么要这样做。
在 Java 的类 TreeSet 的文档中,其中一个构造函数显示具有以下标头:
TreeSet(Comparator<? super E> c)
有人能帮助解释为什么有一个 TreeSet 的构造函数,它将比较器对象作为其参数吗?我不知道为什么要这样做。
上述所有答案都是正确的,但我想补充一点,自定义比较器除了导致不同的排序外,还将以不同的方式过滤值。
由于 Set 的值是单声部的,因此如果自定义比较器返回两个值相同,则 Set 中只会显示其中一个值:
Set<String> s = new TreeSet<>(new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
return s1.trim().compareTo(s2.trim());
}
});
s.add("1");
s.add(" 1");
s.add("2 ");
s.add("2");
s.add(" 2 ");
Arrays.toString(s.toArray()); // [ "1", "2 "]
树集中的元素保持排序。
如果使用没有比较器的构造函数,则元素类的自然排序(由 的实现定义)将用于对 TreeSet 的元素进行排序。Comparable
如果需要不同的排序,请在构造函数中提供比较器。