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