排序接口:Comparable and Comparator

接口说明
接口名称主要函数函数作用
Comparablejava.langint compareTo(T o)比较此对象与指定对象的顺序
Comparatorjava.utilint compare(T o1,T o2)比较用来排序的两个参数
Comparable接口

接口返回值为int类型

 int compareTo(T o); 

int == 0
表示此对象与指定对象相等

int>0
表示此对象大于指定对象

int<0
表示此对象小于指定对象

抛出: CalssCastException - 如果指定对象的类型不允许它与此对象进行比较

示例:

package com.wind.strategy;

import java.util.*;
import java.lang.*;

public class Dog implements Comparable {
    Integer w;
    Integer h;

    public Dog(Integer w, Integer h) {
        this.w = w;
        this.h = h;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "w=" + w +
                ", h=" + h +
                '}';
    }

    @Override
    public int compareTo(Object o) {
        Dog d = (Dog)o;
        return this.h-d.h;
    }

    public static void main(String[] args) {

        List<Dog> list = new ArrayList<Dog>();
        list.add(new Dog(5,5));
        list.add(new Dog(5,1));
        list.add(new Dog(5,3));
        Collections.sort(list); //集合排序方法

        list.forEach(f-> System.out.println(f));
    }
}

输出结果
在这里插入图片描述

Comparator接口

接口返回值为int类型

 int compare(T o1,T o2);

int == 0
表示o1==o2

int>0
表示o1>o2

int<0
表示o1<o2

示例:

import java.util.*;
import java.lang.*;

public class Dog {
    Integer w;
    Integer h;

    public Dog(Integer w, Integer h) {
        this.w = w;
        this.h = h;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "w=" + w +
                ", h=" + h +
                '}';
    }


    public static void main(String[] args) {

        List<Dog> list = new ArrayList<Dog>();
        list.add(new Dog(5,5));
        list.add(new Dog(5,1));
        list.add(new Dog(5,3));
        Collections.sort(list, new Comparator<Dog>() {
            @Override
            public int compare(Dog o1, Dog o2) {
                return o1.h-o2.h;
            }
        }); //集合排序方法

        list.forEach(f-> System.out.println(f));
    }
}

输出结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,我们需要定义一个 Student 对象类,该类包含 name 和 age 两个属性,并且实现 Comparable 接口,以便在 TreeSet 中进行排序。 ```java public class Student implements Comparable<Student>{ private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } // 实现 compareTo 方法,按照姓名的长度排序 public int compareTo(Student o) { int result = this.name.length() - o.name.length(); if(result == 0) { result = this.name.compareTo(o.name); } return result; } // getters and setters ... } ``` 接下来,我们可以创建一个 TreeSet 对象,用于存储 Student 对象,并调用 add 方法将多个 Student 对象添加进去,由于 TreeSet 会自动进行排序和去重,我们可以直接遍历 TreeSet,输出排序后的结果。 ```java import java.util.Set; import java.util.TreeSet; public class Main { public static void main(String[] args) { // 创建 TreeSet 对象 Set<Student> set = new TreeSet<Student>(); // 添加多个 Student 对象 set.add(new Student("Tom", 18)); set.add(new Student("Lucy", 20)); set.add(new Student("Jack", 22)); set.add(new Student("Mike", 21)); set.add(new Student("Mary", 19)); // 遍历 TreeSet,输出排序后的结果 for(Student s : set) { System.out.println(s.getName() + ", " + s.getAge()); } } } ``` 输出结果如下: ``` Tom, 18 Mary, 19 Jack, 22 Mike, 21 Lucy, 20 ``` 可以看到,输出结果按照姓名的长度排序,并且具备唯一性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值