TreeSet指定排序规则

发布时间:2024年01月15日

TreeSet集合如果要对添加的元素进行排序,则添加的元素所属的类要实现Comparable接口(基本类型的包装类,String类都文现了该接口),Comparable接口的compareTo()方法内会用自然比较方法对元素排序,这种排序称为类的自然排序。

如果将自定义的IPhone对象存入TreeSet,TreeSet将不会对添加的元素进行排序,IPhone对象所属的类可以通过实现Comparable接口并重写compareTo()方法实现对象元素的顺序存取。

TreeSet集合还有另一种实现排序的方式。即通过实现?Comparator接口,并实现compare()方法,这种排序称为比较器排序。

package demo1;

import java.util.Collection;
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet;

/**
 * 目标:观察TreeSet对于有值特性的数据如何排序。
 *      学会对自定义类型的对象进行指定规则排序
 */
public class SetDemo2 {
    public static void main (String[] args){
        // 方式一:使用TreeSet集合存储元素(采用默认的排序方式)
        Set<Integer> sets = new TreeSet<>(); // 不重复 无索引 可排序
        sets.add(22);
        sets.add(24);
        sets.add(11);
        sets.add(11);
        sets.add(8);
        System.out.println(sets);
        //打印结果: [8, 11, 22, 24]


        Collection books=new TreeSet();// 不重复 无索引 可排序
        books.add ("Java就该这样学");
        books.add ("Java就该这样学");
        books.add ("Java编程基础");
        books.add ("Java编程基础");
        books.add("javaWeb基础");
        System.out.println(books);
        //打印结果:[Java就该这样学, Java编程基础, javaWeb基础]


        // 方式二:进行规则定制
        Set<IPhone>  phones=new TreeSet<>(new Comparator<IPhone>() {
            public int compare(IPhone o1, IPhone o2) {
                //return  (int)(o1.getPrice()-o2.getPrice());//升序
                //return  (int)(o2.getPrice()-o1.getPrice());//降序
                // 注意:浮点型建议直接使用Double.compare进行比较
                //return Double.compare(o1.getPrice(),o2.getPrice());//升序
                return Double.compare(o2.getPrice(),o1.getPrice());//降序
            }
        });

        /*Set<IPhone>  phones2=new TreeSet<>(
            (o1, o2)->0
        );*/
        IPhone i14=new IPhone("iphone14",6299.0);
        IPhone i14Pro=new IPhone("iphone14Pro",7299.0);
        IPhone i13=new IPhone("iphone13",5299.0);
        phones.add(i14);
        phones.add(i14Pro);
        phones.add(i13);
        System.out.println(phones);
        //打印结果:[IPhone{model='iphone14Pro', price=7299.0},
        //         IPhone{model='iphone14', price=6299.0},
        //         IPhone{model='iphone13', price=5299.0}]
    }
}


class  IPhone{
    private String model;
    private Double price;
    public Double getPrice() {
        return price;
    }
    public IPhone(String model, Double price) {
        this.model = model;
        this.price = price;
    }
    public String toString() {
        return "IPhone{" +
                "model='" + model + '\'' +
                ", price=" + price +
                '}';
    }
}

文章来源:https://blog.csdn.net/gulanga5/article/details/135599970
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。