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.黑马视频学习记录