SortedSet自定义排序

SortedSet自定义排序我们知道 集合 Set 可以存放一系列的对象 比如 int class 而且是无序的 是不可重复的 今天我们来探讨的是 Set 可不可以排序 怎样自定义排序规则首先盗一张图来说明 Set 的继承关系 我们今天主要讨论 SortedSet 的用法 注意 上图里都是借口 需要用它们的实现类 下面我们来实现 SortedSet 的排序 publicclasst publicstatic

我们知道,集合Set可以存放一系列的对象,比如int,class,而且是无序的,是不可重复的。今天我们来探讨的是:Set可不可以排序,怎样自定义排序规则

首先盗一张图来说明Set的继承关系:

居中

下面我们来实现SortedSet的排序:

public class test { public static void main(String[] args) { TreeSet 
   
   set= 
   new TreeSet 
   
     (); 
    set.add( 
    "B"); 
    set.add( 
    "D"); 
    set.add( 
    "A"); 
    set.add( 
    "E"); 
    set.add( 
    "C"); System. 
    out.println( 
    set); } } 
    
  
//这时TreeSet的一个构造方法 //comparator:这个就是自定义的排序规则 public TreeSet(Comparator 
  super E> comparator) { this(new TreeMap<>(comparator)); }

下面我们来测试一下;

public class test { public static void main(String[] args) { //new 一个自定义Comparator TreeSet 
   
   set= 
   new TreeSet 
   
     ( 
    new MyComparator()); 
    set.add( 
    "B"); 
    set.add( 
    "D"); 
    set.add( 
    "A"); 
    set.add( 
    "E"); 
    set.add( 
    "C"); System. 
    out.println( 
    set); } } class MyComparator implements Comparator{ @Override 
    public 
    int 
    compare(Object o1, Object o2) { String s1=(String) o1; String s2=(String) o2; 
    //反序 
    return s2.compareTo(s1); } } 
    
  

结果和显然:[E, D, C, B, A]

这都是很简单的,如果我们用一个自定义class呢,比如一个Person类,要求按照age排序,我们来看一下如何实现:

public class test { public static void main(String[] args) { //自定义排序规则 TreeSet 
   
   set= 
   new TreeSet 
   
     ( 
    new MyComparator()); 
    set.add( 
    new Person( 
    "A", 
    20)); 
    set.add( 
    new Person( 
    "D", 
    10)); 
    set.add( 
    new Person( 
    "E", 
    40)); 
    set.add( 
    new Person( 
    "C", 
    50)); 
    set.add( 
    new Person( 
    "B", 
    30)); System. 
    out.println( 
    set); } } class Person{ String name; 
    int age; 
    public 
    Person(String name, 
    int age){ 
    this.name=name; 
    this.age=age; } @Override 
    //重写toString方法,制定输出格式: 
    public String 
    toString() { 
    return 
    "name:"+name+ 
    ",age="+age; } } class MyComparator implements Comparator{ @Override 
    public 
    int 
    compare(Object o1, Object o2) { Person p1=(Person) o1; Person p2=(Person) o2; 
    //自定义比较规则 
    return ( 
    int) (p1.age-p2.age); } } 
    
  

达到了我们想要的结果。

这样,我们就搞定了Set的排序。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/177843.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月26日 下午6:37
下一篇 2026年3月26日 下午6:37


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号