在Java类TreeSet的文档中,显示一个构造函数具有以下标题:
TreeSet(Comparator<? super E> c)有人能帮助解释为什么TreeSet有一个构造函数,它以一个比较器对象作为其参数吗?我不知道为什么会这样。
发布于 2015-04-17 12:25:23
对TreeSet中的元素进行排序。
如果使用没有比较器的构造函数,元素类的自然排序(由Comparable的实现定义)将用于对TreeSet的元素进行排序。
如果需要不同的排序,则在构造函数中提供比较器。
发布于 2018-04-09 16:29:50
以上所有答案都是正确的,但我想补充的是,一个自定义比较器除了会导致不同的排序之外,还会以不同的方式过滤值。
由于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 "]发布于 2015-04-17 12:28:11
此构造函数允许您定义在将Comparator插入到位于Set后面的树中时使用的Set。
Comparator<String> comp = (String o1, String o2) -> (o1.compareTo(o2));
Set<String> ts = new TreeSet<>(comp);https://stackoverflow.com/questions/29699103
复制相似问题