版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012292754/article/details/86652008
1 java.lang.Comparable
1.1 引用类型之内置类比较大小
- 整数、小数等直接比较基本数据类型的大小;
- 字符: 比较 Unicode 码之差
- 字符串
* 如果其中一个是另外一个起始开始的子串,返回长度之差
* 否则返回 第一个不相等的 Unicode 码之差
java.util.Date
,根据日期的长整型比较
1.1.1 字符串数组比较案例
package day04.compara;
import java.util.Arrays;
public class Demo1 {
public static void main(String[] args) {
String[] arr = {"abcd", "a", "def", "abc"};
bubbleSort(arr);
}
public static void bubbleSort(String[] arr) {
boolean sortFlag = true;
for (int j = 0; j < arr.length - 1; j++) { //趟数
sortFlag = true;
for (int i = 0; i < arr.length - 1 - j; i++) {
if (arr[i].compareTo(arr[i + 1]) > 0) {
String temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
sortFlag = false;
}
System.out.println(Arrays.toString(arr));
}
if (sortFlag) { // 减少趟数
break;
}
}
}
}
[a, abcd, def, abc]
[a, abcd, def, abc]
[a, abcd, abc, def]
[a, abcd, abc, def]
[a, abc, abcd, def]
[a, abc, abcd, def]
Process finished with exit code 0
1.1.2 日期比较
package day04.compara;
import java.util.Arrays;
import java.util.Date;
public class DateCompare {
public static void main(String[] args) {
Date[] arr = new Date[3];
arr[0] = new Date();
arr[1] = new Date(System.currentTimeMillis() - 1000 * 60 * 60);
arr[2] = new Date(System.currentTimeMillis() + 1000 * 60 * 60);
//从大到小排序
boolean sortFlag = true;
for (int j = 0; j < arr.length - 1; j++) {
sortFlag = true;
for (int i = 0; i < arr.length - 1 - j; i++) {
if (arr[i].compareTo(arr[i + 1]) < 0) {
Date temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
sortFlag = false;
}
}
if (sortFlag) {
break;
}
}
System.out.println(Arrays.toString(arr));
}
}
[Fri Jan 25 22:45:57 CST 2019, Fri Jan 25 21:45:57 CST 2019, Fri Jan 25 20:45:57 CST 2019]
2 java.util.Comparator
- 提供排序的比较器,业务比较器
- 重写
public int compare(T o1,T o2)
- 作用:(1)解耦:独立于实体类;(2)方便:便于应对各种排序规则
StringCompare.java
package day04.compara;
import java.util.Comparator;
public class StringCompare implements Comparator<String> {
//按照长度比较
@Override
public int compare(String o1, String o2) {
int len1 = o1.length();
int len2 = o2.length();
return len1 - len2;
}
}
package day04.compara;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
public class MyUtils {
/*
* 数组的排序(降序) + Comparator 接口
* */
public static <T> void sortArray(Object[] arr, Comparator<T> com) {
boolean sortFlag = true;
for (int j = 0; j < arr.length - 1; j++) {
sortFlag = true;
for (int i = 0; i < arr.length - 1 - j; i++) {
if (com.compare((T) arr[i], (T) arr[i + 1]) < 0) {
Object temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
sortFlag = false;
}
}
if (sortFlag) {
break;
}
}
}
/***
* @Description: list 的排序 + 比较器
* @param list
* @param com
* @return void
*/
public static <T> void sortList(List<T> list, Comparator<T> com) {
Object[] arr = list.toArray();
sortArray(arr, com);
for (int i = 0; i < arr.length; i++){
list.set(i,(T)arr[i]);
}
}
public static void main(String[] args) {
String[] arr = {"a", "abcd", "def", "abc"};
sortArray(arr, new StringCompare());
System.out.println("========= 使用 Comparator 排序数组================");
System.out.println(Arrays.toString(arr));
List<String> list= new ArrayList<>();
list.add("a");
list.add("abcd");
list.add("abc");
list.add("de");
sortList(list,new StringCompare());
System.out.println("========= 使用 Comparator 排序列表================");
System.out.println(list);
}
}
========= 使用 Comparator 排序数组================
[abcd, def, abc, a]
========= 使用 Comparator 排序列表================
[abcd, abc, de, a]
3 排序工具类 Collections
Collections
工具类提供了大量便于处理容器的方法public static <T extends Comparable<? super T>> void sort(List<T> list)
public static <T> void sort(List<T> list, Comparator<? super T> c)
package day04.compara;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class Demo2 {
public static void main(String[] args) {
List<String> list = new ArrayList<>();
list.add("a");
list.add("abcd");
list.add("abc");
list.add("def");
Collections.sort(list,new StringCompare());
System.out.println("===== comparator=========");
System.out.println(list);
List<String> list2 = new ArrayList<>();
list2.add("a");
list2.add("abcd");
list2.add("abc");
list2.add("def");
Collections.sort(list2);
System.out.println("=====comparable=======");
System.out.println(list2);
}
}