一、Arrays.sort()
- 应用:对数组进行排序
- 默认排序:升序排列
1.Arrays.sort()使用方法
- 直接对数组进行排序:Arrays.sort(int(/short/long/float/double/char/byte)[] a)
public static void main(String[] args) {
int[] arr = {1,4,6,333,8,2};
Arrays.sort(arr);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
运行结果:1 2 4 6 8 333
- 部分元素排序:Arrays.sort(int(/short/long/float/double/char/byte)[] a, int fromIndex, int toIndex)
对索引fromIndex到toIndex-1进行排序
public static void main(String[] args) {
int[] arr = {1,6,4,333,8,2};
Arrays.sort(arr,0,3);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
运行结果:1 4 6 333 8 2
- 降序排列
public static void main(String[] args) {
Integer[] arr = {1,6,4,333,8,2};
Comparator<Integer> comparator=new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
};
Arrays.sort(arr,comparator);
for(int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
运行结果:333 8 6 4 2 1
注意:array只能是Integer,而不能是int
2.Arrays.sort()实现机制(jdk1.8):
- Arrays.sort(int[] a)
public static void sort(int[] a) {
DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0);
}
- Arrays.sort(T[] a, Comparator<? super T> c)
public static <T> void sort(T[] a, Comparator<? super T> c) {
if (c == null) {
sort(a);
} else {
if (LegacyMergeSort.userRequested)
legacyMergeSort(a, c);
else
TimSort.sort(a, 0, a.length, c, null, 0, 0);
}
}
3.TimSort
二、Collections.sort()
- 应用:List接口
- 默认排序:升序排列
- 实现机制:底层默认调用Arrays.sort()
default void sort(Comparator<? super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator<E> i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
- Collections.sort()使用方法
public static void main(String[] args) {
List<Person> list=new ArrayList<>();
Person p1=new Person("张三",25);
Person p2=new Person("李四",36);
Person p3=new Person("王五",19);
list.add(p1);list.add(p2);list.add(p3);
Comparator<Person> comparator=new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o2.age-o1.age;
}
};
Collections.sort(list,comparator);
for(int i=0;i<list.size();i++){
System.out.println(list.get(i).name+" "+list.get(i).age);
}
}
运行结果:
李四 36
张三 25
王五 19