首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有TreeSet参数的Comparator<?>构造函数

带有TreeSet参数的Comparator<?>构造函数
EN

Stack Overflow用户
提问于 2015-04-17 12:22:40
回答 10查看 74.5K关注 0票数 25

Java类TreeSet的文档中,显示一个构造函数具有以下标题:

代码语言:javascript
复制
TreeSet(Comparator<? super E> c)

有人能帮助解释为什么TreeSet有一个构造函数,它以一个比较器对象作为其参数吗?我不知道为什么会这样。

EN

回答 10

Stack Overflow用户

回答已采纳

发布于 2015-04-17 12:25:23

对TreeSet中的元素进行排序。

如果使用没有比较器的构造函数,元素类的自然排序(由Comparable的实现定义)将用于对TreeSet的元素进行排序。

如果需要不同的排序,则在构造函数中提供比较器。

票数 23
EN

Stack Overflow用户

发布于 2018-04-09 16:29:50

以上所有答案都是正确的,但我想补充的是,一个自定义比较器除了会导致不同的排序之外,还会以不同的方式过滤值。

由于Set的值是单音的,如果自定义比较器返回两个相同的值,则其中只有一个将出现在集合中:

代码语言:javascript
复制
    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 "]
票数 26
EN

Stack Overflow用户

发布于 2015-04-17 12:28:11

此构造函数允许您定义在将Comparator插入到位于Set后面的树中时使用的Set

代码语言:javascript
复制
Comparator<String> comp = (String o1, String o2) -> (o1.compareTo(o2));
Set<String> ts = new TreeSet<>(comp);
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29699103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档