Java List 排序(附中文排序)

目录
  1. 1、Collections.sort的使用
  2. 2、使用Comparable排序
  3. 3、使用Comparator排序

1、Collections.sort的使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 相关源码
package java.util;

...

public class Collections {
// 方法1
public static <T extends Comparable<? super T>> void sort(List<T> list) {
list.sort(null);
}
// 方法2
public static <T> void sort(List<T> list, Comparator<? super T> c) {
list.sort(c);
}
}

Collections.sort()方法可以对List的具体实现进行排序。

1
2
3
4
5
6
// 一个简单的例子

List<String> list = new ArrayList<>();
// list add data
Collections.sort(list); // 正序
Collections.sort(list, Collections.reverseOrder()); // 倒序

String实现了Comparable接口,因此我们可以调用 方法1 对由String组成的ArrayList进行排序。当然Java中还有很多实现Comparable接口的类,像Integer、Boolean、BigDecimal、File和Date等。

2、使用Comparable排序

1
2
3
4
5
6
7
// 相关源码
package java.lang;
import java.util.*;

public interface Comparable<T> {
public int compareTo(T o);
}

实现 Comparable接口的类需要重写compareTo()方法,该方法接收一个同类型的对象,要实现当前对象和接收到的对象的比较。compareTo()方法返回int类型的比较结果:

  • 正值表示当前对象比传递给compareTo()的对象大
  • 负值表示当前对象比传递给compareTo()的对象小
  • 零表示两个对象相等

待排序的对象X实现了Comparable接口,实现了compareTo方法后就可以使用 方法1 Collections.sort(list)进行排序了。

3、使用Comparator排序

1
2
3
4
5
6
7
8
9
10
11
// 相关源码
package java.util;

...

public interface Comparator<T> {
int compare(T o1, T o2);
}
...


Comparator接口提供了一个叫compare()的方法,要注意的是compare()接受两个相同类型的对象进行比较。
实现该接口实现该方法后,即可使用 方法2 Collections.sort(list, comparator)进行排序了。

最后附上一个字符串简体中文的排序。

1
2
3
List<String> names = new ArrayList<>();
// add data
Collections.sort(names, Collator.getInstance(Locale.SIMPLIFIED_CHINESE));