你可以使用有序集合,如 TreeSet 或 TreeMap,你也可以使用有顺序的的集合,如 list,然后通过 Collections.sort() 来排序。
正序排序:Arrays.sort(array),会检查数组个数大于286且连续性好就使用归并排序,若小于32使用插入排序,其余情况使用快速排序
int[] array = {10, 3, 6, 1, 4, 5, 9};
Arrays.sort(array);
降序排序:先将数组 Arrays.asList() 转为集合,然后使用 Collections.reverse() 反转集合,注意如果是基础数据类型(不是数据包装类),不能使用 Arrays.asList() 方法可以使用 Guava 的 Ints.asList() 方法代替
Integer[] array = {10, 3, 6, 1, 4, 5, 9};
Arrays.sort(array);
List<Integer> list = Arrays.asList(array);
Collections.reverse(list);//冒泡 交换
说明:主要是对jdk类库中的包装类排序,例如:Integer、String等,这些类都已经重写了Compare方法,都有默认排序规则
常规方式:
List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9));
// 升序
Collections.sort(list);
// 降序
Collections.sort(list, Collections.reverseOrder());
lambda 方式:
// 升序
List<Integer> collect = list.stream().sorted().collect(Collectors.toList());
// 降序
List<Integer> collect = list.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
lists.sort((o1,o2)->o1.getAge()-o2.getAge());
lists.sort(Comparator.comparing(Person::getAge).reversed().thenComparing(Person::getName));
lambda 方式:排序值不能为 null
//方法二:使用stream sorted方法
list=list.stream().sorted((s2,s1 )->s1.getShowOrder().compareTo(s2.getShowOrder())).collect(Collectors.toList());
//方法三:使用jdk8的sort方法
list.sort((s2,s1)->s1.getShowOrder().compareTo(s2.getShowOrder()));
//方法四:总结
Arrays.sort(array, (v1, v2) -> v1[0] - v2[0]);
Collections.sort(list, (o1,o2)->o1[0]-o2[0]);
list.sort((o1, o2) -> o1[0] - o2[0]);
Comparable 方式:在实体中实现 Comparable<实体> 接口,重写 compareTo 方法,缺点不灵活
public class Student implements Comparable<Student> {
private String name;
private Integer age;
public int compareTo(StudentAsc o) {
if(null == this.age) {
return -1;
}
if(null == o.getAge()) {
return 1;
}
return this.age.compareTo(o.getAge());
}
}
Comparator 方式:使用Collections.sort(List list, Comparator<? super T> c)方法来实现相对上面来说灵活很多
Collections.sort(students, new Comparator<Student>() {
public int compare(Student o1, Student o2) {
if(null == o1.getAge()) {
return -1;
}
if(null == o2.getAge()) {
return 1;
}
return o1.getAge().compareTo(o2.getAge());
}
});
说明:Collections.sort 方法底层就是调用的 array.sort 方法,根据数据大小的不同会使用插入排序、归并排序、快速排序(后两种排序算法都是分治思想)

