自然排序和定制排序
comparable接口:自然排序
- String已经实现好了compareTo(),默认从小到大
String[] a=new String[]{"AA","GG","CC"};
Arrays.sort(a);
System.out.println(Arrays.toString(a));
- 自定义类型需要自己定义 ,记得要重写toString()方法/
import java.util.Arrays;
public class test {
public static void main(String[] args) {
goods[] g=new goods[3];
g[2]=new goods("c",1);
g[1]=new goods("b",2);
g[0]=new goods("a",3);
Arrays.sort(g);
System.out.println(Arrays.toString(g));
}
}
class goods implements Comparable{
String name;
int price;
public goods() {
}
public goods(String name, int price) {
this.name = name;
this.price = price;
}
@Override
public int compareTo(Object o) {
if(o instanceof goods){
goods g=(goods)o;
if(this.price>g.price) return 1;
else if(this.price<g.price) return -1;
else return -String.CASE_INSENSITIVE_ORDER.compare(this.name,g.name);
//价格一样,就按照名字的顺序,加负号,表示从高到低
}
throw new RuntimeException("传入数据有错误");
}
@Override
public String toString() {
return "goods{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
}
comparator接口:定制排序
当元素的类型没有实现Comparable接口又不方便修改代码,那么可以考虑使用comparator的对象排序
重写compare(Object o1.Object o2)方法,比较大小
String[] a=new String[]{"AA","GG","CC"};
Arrays.sort(a, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return -o1.compareTo(o2);
}
});
System.out.println(Arrays.toString(a));
总结
String自带了排序函数s1.CompareTo(s2) Comparable重写,一劳永逸式比较
其他包装类也带了排序函数Double.Compare(int n1,int n2) Comparator重写,一次性比较