Java教程

Java-Collection-Set-treeSet

本文主要是介绍Java-Collection-Set-treeSet,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

TreeSet集合的特点?

可排序(字符串排序按照对应的ASCII编码排序)、不重复、无索引

底层基于红黑树实现排序,增删改查性能较好

TreeSet集合自定义排序规则有几种方式

类实现Comparable接口,重写比较规则。

集合自定义Comparator比较器对象,重写比较规则。

代码:

package Collection_Set_treeSet;

public class Apple implements Comparable<Apple>{ //  implements Comparable<Apple>为自定义比较方法一添加
    private String name;
    private String color;
    private double weight;
    private int money;

    public Apple() {
    }

    public Apple(String name, String color, double weight, int money) {
        this.name = name;
        this.color = color;
        this.weight = weight;
        this.money = money;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    public double getWeight() {
        return weight;
    }

    public void setWeight(double weight) {
        this.weight = weight;
    }

    public int getMoney() {
        return money;
    }

    public void setMoney(int money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "Apple{" +
                "name='" + name + '\'' +
                ", color='" + color + '\'' +
                ", weight=" + weight +
                ", money=" + money +
                '}';
    }

    /**
     * 1.自定义比较方法一
     * @param o
     * @return
     */
    @Override
    public int compareTo(Apple o) {
        return this.money-o.money;//消除重复内容
        //return this.money-o.money >=0 ? 1:-1;   不消除重复内容
       // return Double.compare(this.weight,o.weight);  浮点型用此方法
    }
}
package Collection_Set_treeSet;

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

//了解treeSet的有值排序和自定义排序,字符串排序按照ASCII对应的编码排序(不重复,无索引,可排序)
public class treeSet_paixu {
    public static void main(String[] args) {
        Set<Integer> num = new TreeSet<>();
        num.add(45);
        num.add(12);
        num.add(124);
        num.add(33);
        System.out.println(num);//  [12, 33, 45, 124]

        //自定义排序

        /**
         * 自定义比较方法二
         * 优先使用此方法
         Set<Apple> app = new TreeSet<>(new Comparator<Apple>() {
                   @Override
                   public int compare(Apple o1, Apple o2) {
                       return o1.getWeight()-o2.getWeight();
                   }
         });
         */
        Set<Apple> app = new TreeSet<>();
        app.add(new Apple("红苹果","红色",45.5,54));
        app.add(new Apple("绿苹果","绿色",23.0,89));
        app.add(new Apple("黄苹果","黄色",12.5,4));
        app.add(new Apple("金苹果","金色",49.5,4));
        System.out.println(app);//排序代码见Apple61-70。按照money排序,因为红苹果和金苹果的价格相同,则输出后不会显示金苹果的资料
        //如果两个比较的内容相同且需要都显示出来,可在Apple类中68排变为return this.money-o.money >=0 ? 1:-1;
    }
}
/**
 自定义排序规则
 方式一
 让自定义的类(如学生类)实现Comparable接口重写里面的compareTo方法来定制比较规则。

 方式二
 TreeSet集合有参数构造器,可以设置Comparator接口对应的比较器对象,来定制比较规则。

 两种方式中,关于返回值的规则:
 如果认为第一个元素大于第二个元素返回正整数即可。
 如果认为第一个元素小于第二个元素返回负整数即可。
 如果认为第一个元素等于第二个元素返回0即可,此时Treeset集合只会保留一个元素,认为两者重复。

 如果要保留重复内容,可用三元运算符

 */

ps.黑马视频学习记录

这篇关于Java-Collection-Set-treeSet的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!