JAVA中的排序函数包括java.util.Arrays包中的Arrays.sort();java.util.Collections包中的Collections.sort()
1.Arrays.sort()函数具有以下几种重载:
以static void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)为例说明该函数的使用方法
函数在输入的数组上排序,返回值为空
该函数参数列表含义:a表示输入数组;fromIndex表示数组a中需要排序部分的起始索引(包括该索引对应的值);toIndex表示数组a中需要排序部分的结束索引(不包括该索引对应的值);c表示自定义比较器(用户可以自己定义比较器用于对非数字数组排序)
例如:
public class Sort {
public static Integer[] sort(Integer[] arr){
Arrays.sort(arr, 0, arr.length, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
return arr;
}
public static void main(String[] args) {
Integer[] ints = {5, 3, 9, 8, 1, 2, 0, 3, 5};
Integer[] n = sort(ints);
for (int i:n) {
System.out.print(i);
System.out.print(',');
}
}
}
//排序结果为:0,1,2,3,3,5,5,8,9
改变Comparator中的(return o1 - o2;)为(return o2 - o1;),可以使排序为降序排序
Arrays.sort(arr, 0, arr.length, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
//排序结果为:9,8,5,5,3,3,2,1,0
改变Comparator匿名类可以实现字符串、对象这些非数字的排序
2.Collections.sort()函数具有以下几种重载:
static <T> void sort(List<T> list, Comparator<? super T> c)为例
函数在输入的列表上排序,返回值为空
该函数参数列表含义:a表示输入列表;c表示自定义比较器
例如:
public class CSort {
public static List<Integer> sort(List<Integer> arr){
Collections.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
return arr;
}
public static void main(String[] args) {
Integer[] m = new Integer[]{5,8,5,4,6,14,8,6};
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(m));
System.out.println(sort(list));
}
}
//排序结果为:[4, 5, 5, 6, 6, 8, 8, 14]
改变Comparator中的(return o1 - o2;)为(return o2 - o1;),可以使排序为降序排序
Collections.sort(arr, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
//排序结果为:[14, 8, 8, 6, 6, 5, 5, 4]
改变Comparator匿名类可以实现字符串、对象这些非数字的排序
3.List中的sort(Comparator<? super E> c)
例如
public class ListSort {
public static List<Integer> sort(List<Integer> c){
c.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
return c;
}
public static void main(String[] args) {
Integer[] m = new Integer[]{5,8,5,4,6,14,8,6};
ArrayList<Integer> list = new ArrayList<Integer>(Arrays.asList(m));
System.out.println(sort(list));
}
}
//排序结果为:[4, 5, 5, 6, 6, 8, 8, 14]
改变Comparator中的(return o1 - o2;)为(return o2 - o1;),可以使排序为降序排序
c.sort(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
//排序结果为:[14, 8, 8, 6, 6, 5, 5, 4]
改变Comparator匿名类可以实现字符串、对象这些非数字的排序
4.Arrays包下的parallelSort()函数用法
排序算法是一个并行排序合并,将数组分解为本身排序然后合并的子数组。 当子阵列长度达到最小粒度时,使用适当的Arrays.sort方法对子阵列进行排序。 如果指定数组的长度小于最小粒度,则使用适当的Arrays.sort方法进行排序。 该算法需要一个不大于原始数组大小的工作空间。 ForkJoin common pool用于执行任何并行任务。
例如以下的逆序排序:
public class ParallelSort {
public static Integer[] sort(Integer[] c) {
Arrays.parallelSort(c, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
return c;
}
public static void main(String[] args) {
Integer[] m = new Integer[]{5,8,5,4,6,14,8,6};
Integer[] n = sort(m);
for (int i:n) {
System.out.print(i);
System.out.print(',');
}
}
}
//排序结果为:14,8,8,6,6,5,5,4