public class ComparableTest {
@Test
public void test1() {
Person p1 = new Person(18, "BB");
Person p2 = new Person(19, "CC");
Person p3 = new Person(20, "AA");
Dog d1 = new Dog(1, "BB");
Dog d2 = new Dog(2, "CC");
Dog d3 = new Dog(3, "AA");
ArrayList<Person> people = new ArrayList<>();
people.add(p2);
people.add(p3);
people.add(p1);
System.out.println("原集合:" + people);
Collections.sort(people);
System.out.println("排序后:" + people);
ArrayList<Dog> dogs = new ArrayList<>();
dogs.add(d2);
dogs.add(d3);
dogs.add(d1);
System.out.println("原集合:" + dogs);
Collections.sort(dogs, new DogComparator());
System.out.println("排序后:" + dogs);
}
}
原集合:[Person{age=19, name='CC'}, Person{age=20, name='AA'}, Person{age=18, name='BB'}]
排序后:[Person{age=18, name='BB'}, Person{age=19, name='CC'}, Person{age=20, name='AA'}]
原集合:[Dog{age=2, name='CC'}, Dog{age=3, name='AA'}, Dog{age=1, name='BB'}]
排序后:[Dog{age=3, name='AA'}, Dog{age=1, name='BB'}, Dog{age=2, name='CC'}]
/**
* 1、实现Comparable接口,实现compareTo方法实现自定义类的比较
*/
class Person implements Comparable<Person> {
public int age;
public String name;
public Person(int age, String name) {
this.age = age;
this.name = name;
}
/**
* 返回“负数”,意味着“x比y小”
* 返回“零”,意味着“x等于y”
* 返回“正数”,意味着“x大于y”
*
* @param o
* @return 按年龄升序
*/
@Override
public int compareTo(Person o) {
return this.age - o.age;
}
@Override
public String toString() {
return "Person{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
class Dog {
public int age;
public String name;
public Dog(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return "Dog{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
/**
* 2、自定义比较器,实现对自定义类的比较
*/
class DogComparator implements Comparator<Dog> {
/**
* 比较大小的逻辑
*
* @param o1
* @param o2
* @return 返回负数 o1在前面 o1小
* 返回零 相等
* 返回正数 o1在后面 o1大
*/
@Override
public int compare(Dog o1, Dog o2) {
//按照年龄排序,调用的是String类的compareTo方法
return o1.name.compareTo(o2.name);
//按照age升序
//return o1.age - o2.age;
}
}
Comparable与Comparator
最新推荐文章于 2024-10-17 16:36:57 发布
本文展示了一个使用Java进行自定义排序的例子,包括实现Comparable接口的Person类和使用自定义比较器DogComparator的Dog类。通过Collections.sort方法,分别按照年龄和名字属性对Person和Dog对象列表进行了排序。
494

被折叠的 条评论
为什么被折叠?



