集合排序

1. compare VS compareTo

参考文献:

Comparable方法中的compareTo方法的返回值的正负 判断升序 还是 降序

 //Comparator 的 compare
public interface Comparator<T> {
    //o1 - o2 正序 
	int compare(T o1, T o2);
    //return o1-o2 正序
}  

//Comparable compareTo
public interface Comparable<T> {
    //this.i - o.i; 正序
    public int compareTo(T o);
    //return this.i - o.i; 正序
}

//String 的 compareTo
public final class String
    implements java.io.Serializable, Comparable<String>, CharSequence{
	public int compareTo(String anotherString) {}
}
//满足 this.i - o.i; 小于0 正序, 大于 0,逆序
System.out.println("a".compareTo("b")); //-1
System.out.println("a".compareTo("ab"));//-1
System.out.println("a".compareTo("a"));//0
System.out.println("b".compareTo("a"));//1
System.out.println("b".compareTo("ba"));//-1

2. 数组/集合排序

数组: Arrays.sort()

  • public static void sort
String[] str = {"a","ab","b","ba"};
Arrays.sort(str); //[a, ab, b, ba]
System.out.println(Arrays.toString(str));
int[] a = {1,5,6,10,2,3,45,100};
Arrays.sort(a);//[1, 2, 3, 5, 6, 10, 45, 100]
System.out.println(Arrays.toString(a));

集合: Collections.sort()

  • public static <T extends Comparable<? super T>> void sort(List list)
  • public static void sort(List list, Comparator<? super T> c)
//Compare
public static void collectionsSort(){
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("a");
        list.add("ab");
        list.add("abc");
        list.add("vaa");
        list.add("baa");
        list.add("bab");
        /*list2.sort(new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                return 0;
            }
        });*/
        Collections.sort(list);
        System.out.println("正序"+list);
    	//正序[a, a, ab, abc, baa, bab, vaa]
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                int index1 = 0;
                int index2 = 0;
                while (index1<o1.length() && index2<o2.length()){
                    int temp = o1.charAt(index1++) - o2.charAt(index2++);//正序
                    if(temp != 0){
                        return -temp; //加上 负号 就是逆序
                    }
                }
                return -(o1.length()-o2.length());
            }
        });
        System.out.println("逆序"+list);
    	//逆序[vaa, bab, baa, abc, ab, a, a]
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值