关于 Comparable 的使用

作为一名刚上路的超初级程序员,今天终于可以迈开自己的第一步,写一篇博客。把我自己都感动哭了。

今天看面试题时看到了一个Comparable 的使用,才发现自己好像并没有使用过这个接口,具体这个接口是怎么用的,我在看了几篇comparable的博客以后觉得应该把这个东西记录下来,也希望自己能够得到成长。

首先我们举一个排列int数组的例子,假如一个数组中有这么几个元素,希望将他进行从小到大排序,不使用冒泡排序等算法,直接使用java中Arrays类的方法进行使用,这个方法就可以直接对数组中的元素进行排序,十分方便。

int[] array = {9,5,7,5,31,7};
        Arrays.sort(array);
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
 }
结果:5 5 7 7 9 31

如果说,现在有一个要求,有一个实体类User,User类中有三个属性,id,name,price

class User{
    private int id;
    private String name;
    private int price;

需要你按照价格升序进行排序(就如上的int数组排序一样)。那么我们做这个的时候,还是可以使用sort()方法,不同的是,之前使用的是int类型的数组,这次需要变更成为,User类型的数组按价格进行排序,这时候就需要让User去实现comparable接口,重写其中的方法,compareTo方法的返回值只有  -1,  0,  1

class User implements Comparable<User>{

    private int id;
    private String name;
    private int price;

    public User(int id, String name, int price) {
        this.id = id;
        this.name = name;
        this.price = price;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", price=" + price +
                '}';
    }

    @Override
    public int compareTo(User o) {
        if(this.price>o.price){
            return 1;
        }else if(this.price<o.price){
            return -1;
        }else {
            return 0;
        }
    }
}

最后  new 几个对象,放入User类型的数组中进行比较,使用sort()进行排序就可以了

        User[] users = new User[3];
        users[0] = new User(1,"寿司",29);
        users[1] = new User(2,"蛋挞",21);
        users[2] = new User(3,"牛排",25);
        Arrays.sort(users);
        for (int i = 0; i < users.length; i++) {
            System.out.println(users[i]);
        } 
结果:    User{id=2, name='蛋挞', price=21}
          User{id=3, name='牛排', price=25}
          User{id=1, name='寿司', price=29}                    

猜你喜欢

转载自www.cnblogs.com/Crush123/p/11580792.html