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