Comparable接口的使用以及实例说明

Comparable接口

一、comparable介绍

       在java编程中,我们经常会对集合、数组进行排序,当集合中的对象是自定义的对象时,我们有以下方法能够使排序方法应用到自定义对象的集合(数组)中。下面我们介绍Comparable的用法。

二、comparable用法

     (1)、使用Collections.sort对集合进行排序(集合中存放Integer类型)

public static void main(String[] args) {
    List<Integer> list = new ArrayList<Integer>();
    list.add(5);
    list.add(9);
    list.add(8);
    list.add(10);
    list.add(1);
    System.out.println(list);
    Collections.sort(list);
    System.out.println(list);

}

    (2)、Collections.sort对集合进行排序(集合中存放对象)

List<User> list = new ArrayList<User>();
    list.add(new User("zhangsan", 80));
    list.add(new User("lisi", 88));
    list.add(new User("wangwu", 60));
    Collections.sort(list, new Comparator<User>() {
        public int compare(User user1, User user2) {
            /**
             * 升序排的话就是第一个参数.compareTo(第二个参数);
             * 降序排的话就是第二个参数.compareTo(第一个参数);
             */
            return user1.getScore().compareTo(user2.getScore());//升序
        }
    });
    System.out.println(list);

    (3)、Comparable进行排序(使用泛型)

1、定义一个Comparable接口

package strategy;
public interface Comparable<T> {
    int compareTo(T o);
}

2、定义一个排序类

package strategy;
//排序类
public class Sorter {
    public static void sort(Comparable[] arr){
        for(int i =0; i<arr.length-1;i++){
            int minPos =i;
            for(int j=i+1; j<arr.length; j++){
                minPos =arr[j].compareTo(arr[minPos]) == -1 ? j : minPos;
            }
            swap(arr, i,minPos);
        }
    }
    static void swap(Comparable[] arr,int i,int j){
        Comparable temp =arr[i];
        arr[i] =arr[j];
        arr[j] =temp;
    }
}

3、定义一个动物类并实现Comparable接口

package strategy;

/**
 * 猫对象
 */
public class Cat implements Comparable<Cat>{
    int weight;
    int height;
    public  Cat(int weight,int height){
        this.weight=weight;
        this.height=height;
    }
    public int compareTo(Cat cat){
        if(this.weight < cat.weight) return -1;
        else if(this.weight >cat.weight) return 1;
        else return 0;
    }
    @Override
    public String toString() {
        return "Cat{" +
                "weight=" + weight +
                ", height=" + height +
                '}';
    }
}

4、主函数类

package strategy;

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        Cat[] cats ={new Cat(3,3),new Cat(5,5),new Cat(1,1)};
        Sorter sorter =new Sorter();
        sorter.sort(cats);
        System.out.println(Arrays.toString(cats));
    }
}

以上是Comparable的使用,写的不好请多多指教!!

谢谢

 

  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java中的`Comparable`接口是一个泛型接口,用于实现对象的比较。如果一个类实现了`Comparable`接口,那么它的对象就可以进行比较,并且可以使用`Collections.sort()`方法对该类的对象进行排序。 一个类实现`Comparable`接口需要实现其中的`compareTo`方法,该方法返回一个整数值。当比较两个对象时,该方法应该返回以下三种情况之一: - 如果当前对象小于比较对象,则返回一个负整数。 - 如果当前对象等于比较对象,则返回0。 - 如果当前对象大于比较对象,则返回一个正整数。 下面以一个`Person`类为例,说明如何使用`Comparable`接口进行对象的比较和排序。 ```java public class Person implements Comparable<Person> { private String name; private int age; public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; } @Override public int compareTo(Person o) { // 按照年龄从小到大排序 return this.age - o.age; } } ``` 在上面的代码中,`Person`类实现了`Comparable`接口,并且重写了`compareTo`方法。在`compareTo`方法中,按照年龄从小到大排序。如果想要按照其他的排序方式,可以在`compareTo`方法中修改比较逻辑。 现在可以创建`Person`对象,并且使用`Collections.sort()`方法对它们进行排序: ```java List<Person> people = new ArrayList<>(); people.add(new Person("张三", 20)); people.add(new Person("李四", 18)); people.add(new Person("王五", 25)); Collections.sort(people); for (Person person : people) { System.out.println(person.getName() + " " + person.getAge()); } ``` 输出结果为: ``` 李四 18 张三 20 王五 25 ``` 可以看到,`Person`对象被按照年龄从小到大排序了。这就是使用`Comparable`接口进行对象比较和排序的方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值