Comparatble和Comparator

2. TreeSet存类对象(Comparable接口)

TreeSet是无序的 如果需要按照类对象的属性比较排序 需要实现Comparable接口
Comparable接口下有compareTo抽象方法
需要依照需求重写抽象方法后TreeSet集合才能按顺序插入类对象
package com.qfedu.a_treeset;

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

class Dog implements Comparable<Dog>{
   String name;
   int age;

   public Dog(String name, int age) {
       this.name = name;
       this.age = age;
  }

   @Override
   public String toString() {
       return "Dog{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
  }

   @Override
   public int compareTo(Dog o) {
       //先按照字典的顺序进行排,如果字符串相等再按照年龄升序排
       int num = this.name.compareTo(o.name);
       if (num == 0) {
           //字符串相等的情况,又要比较年领
           int num1 = this.age - o.age;
           return num1;

      }
       return num;
  }
}
public class Demo3 {
   public static void main(String[] args) {
       Set<Dog> set = new TreeSet<>();
       set.add(new Dog("彩云", 5));
       set.add(new Dog("旺财", 2));
       set.add(new Dog("大黄", 6));
       set.add(new Dog("大黄", 3));
       set.add(new Dog("大黄", 4));
       System.out.println(set);
  }
}

3. 使用比较器将数据存储到TreeSet中

比较器接口Comparator
首先创建一个类存储数据
class Student {
   String name;
   int age;

   public Student(String name, int age) {
       this.name = name;
       this.age = age;
  }

   @Override
   public String toString() {
       return "Student{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
  }
}
创建一个类继承比较器
重写Comparator中抽象方法Compare
class MyComparator implements Comparator<Student> {

   @Override
   public int compare(Student o1, Student o2) {
       int num = o1.age - o2.age;
       return num;
  }
}
创建一个以类名为泛型的Set集合,子类的引用括号里添加Comparator属性
Set<Student> students = new TreeSet<>(new MyComparator());
package com.qfedu.b_comparator;

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

class Student {
   String name;
   int age;

   public Student(String name, int age) {
       this.name = name;
       this.age = age;
  }

   @Override
   public String toString() {
       return "Student{" +
               "name='" + name + '\'' +
               ", age=" + age +
               '}';
  }
}
class MyComparator implements Comparator<Student> {

   @Override
   public int compare(Student o1, Student o2) {
       int num = o1.age - o2.age;
       return num;
  }
}
public class Demo1 {
   public static void main(String[] args) {
       //如果想要使用比较器的写法 必须再new TreeSet的时候
       //加上比较器对象
       //TreeSet 有一个有参构造,有参构造的方法是Comparwator的对象
       //Comparator是一个接口 不能实例化,咋办?再写一个类去实现这个接口
       Set<Student> students = new TreeSet<>(new MyComparator());
       students.add(new Student("维一", 23));
       students.add(new Student("永康", 19));
       students.add(new Student("赵娜", 18));
       students.add(new Student("运铎", 28));
       students.add(new Student("佳祥", 36));
       System.out.println(students);
  }
}
 
posted @ 2022-08-06 11:34  早睡晚起身体好  阅读(29)  评论(0)    收藏  举报