Comparable接口
TreeSet:实现去重和排序的方式:1.让元素去实现Comparable接口,重写compareTo方法
public class Demo {
public static void main(String[] args) {
// TreeSet:实现去重和排序的方式:
//1.让元素去实现Comparable接口,重写compareTo方法------默认排序
//学习第一种
//1.让元素去实现Comparable接口,重写compareTo方法------默认排序
TreeSet set = new TreeSet<>();
//使用TreeSet在存储字符串的时候自动实现了排序和去重
//因为在add方法中调用了Comparable接口的compareTo方法
//默认是按照升序字典顺序排序
set.add("java1");
set.add("java4");
set.add("java2");
set.add("java5");
set.add("java2");
System.out.println(set);
//实例:将Person2的对象存入TreeSet,按照姓名和年龄比较
TreeSet<Person2> set1 = new TreeSet<>();
set1.add(new Person2("bingbing1", 18));
set1.add(new Person2("bingbing2", 18));
set1.add(new Person2("bingbing3", 183));
set1.add(new Person2("bingbing3", 183));
set1.add(new Person2("bingbing0", 17));
System.out.println(set1);
}
}
//自定义的类实现Comparable接口
class Person2 implements Comparable<Person2>{
String name;
int age;
public Person2(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person2 [name=" + name + ", age=" + age + "]";
}
@Override
//自己制定的规则:按照年龄和姓名比较
/*
*返回正数,代表前面的比后面的大
*返回0,代表前后相等
*返回负数,代表前面的比后面的小
*/
public int compareTo(Person2 person2) {
//先按照年龄比较,年龄相同再去比姓名
int num = this.age-person2.age;
return num==0?name.compareTo(person2.name):num;
}
}
Comparetor接口
比较器类,让他实现Comparetor接口,重写compare方法,再将比较器对象作用于TreeSet,内部的元素会按照比较器进行比较.—人工排序
public class Demo11 {
public static void main(String[] args) {
//第二种
//2.创建比较器对象,并指定给存储元素的TreeSet
ComWithLength comWithLength = new ComWithLength();
TreeSet set = new TreeSet<>(comWithLength);
//使用TreeSet在存储字符串的时候自动实现了排序和去重
set.add("java1111111111111");
set.add("java422");
set.add("java2456");
set.add("java523535");
set.add("java2456");
System.out.println(set);
}
}
//1.创建比较器类
class ComWithLength implements Comparator<String>{
public int compare(String s1, String s2) {
//要求按照字符串的长度对字符串进行排序--从短到长,当长度相同的时候,按照字典排序
int num = s1.length()-s2.length();
return num==0?s1.compareTo(s2):num;
}
}