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]
}