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的使用,写的不好请多多指教!!

谢谢

 

以下是一个使用Collections类实现的程序,包含了Book类和SortSearchMainClass类: ```java import java.util.ArrayList; import java.util.Collections; import java.util.List; public class Book implements Comparable<Book> { private double price; public Book(double price) { this.price = price; } public double getPrice() { return price; } public void setPrice(double price) { this.price = price; } // 实现Comparable接口的compareTo方法,规定两个Book对象的大小关系 public int compareTo(Book other) { return Double.compare(this.price, other.price); } public static void main(String[] args) { // 创建一个包含若干个Book对象的链表 List<Book> books = new ArrayList<>(); books.add(new Book(10.0)); books.add(new Book(20.0)); books.add(new Book(30.0)); books.add(new Book(40.0)); books.add(new Book(50.0)); // 创建一个新的Book对象,并检查它和链表中哪些对象相等 Book newBook = new Book(30.0); int index = Collections.binarySearch(books, newBook); if (index >= 0) { System.out.println("新书价格为 " + newBook.getPrice() + " 的书已存在,位置为 " + index); } else { System.out.println("新书价格为 " + newBook.getPrice() + " 的书不存在,可以插入到位置 " + (-index-1)); } } } ``` 在这个程序中,我们首先定义了Book类,其中包含了一个price成员变量,并实现了Comparable接口,规定了两个Book对象的大小关系为它们price成员的大小关系。然后,我们在SortSearchMainClass类的main()方法中创建了一个包含若干个Book对象的链表。接着,我们创建了一个新的Book对象,并使用Collections类的binarySearch()方法,在链表中查找它的位置,如果返回值大于等于0,则说明这个新书已经存在;否则,返回的值为-(insertion point)-1,insertion point是可以将新书插入到链表中的位置。最后,我们根据返回值输出相应的结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值