Java中常用的数组或集合排序的方法有两个,一个是java.util.Arrays中的静态方法Arrays.sort(),还有一个是java.util.Collections中的静态方法的Collections.sort()方法,下面分别介绍两种用法。
一.java.util.Arrays中的静态方法Arrays.sort()
Arrays中的sort()方法主要是针对各种数据类型(基本数据类型和引用对象类型)的数组元素排序。
.......
关于引用对象类型数组的排序sort()方法要用到接口Comparator<T>,对其排序内部的比较函数compare()进行重写,以便于我们按照我们的排序要求对引用对象数组极性排序,默认是升序排序,但可以自己自定义成降序排序。关于Comparator<T>的介绍见官方文档
sortpublic static <T> void sort(T[] a, Comparator<? super T> c)根据指定比较器产生的顺序对指定对象数组进行排序。数组中的所有元素都必须是通过指定比较器 可相互比较的(也就是说,对于数组中的任何 e1 和 e2 元素而言, c.compare(e1, e2) 不得抛出 ClassCastException)。 保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。 该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。 参数:
抛出:
sortpublic static <T> void sort(T[] a, int fromIndex, int toIndex, Comparator<? super T> c)根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。排序的范围从索引 fromIndex(包括)一直到索引 toIndex(不包括)。(如果 fromIndex==toIndex,则排序范围为空。)此范围内的所有元素都必须是通过指定比较器 可相互比较的(也就是说,对于该范围中的任何 e1 和 e2 元素而言, c.compare(e1, e2) 不得抛出 ClassCastException)。 保证此排序是稳定的:不会因调用 sort 方法而对相等的元素进行重新排序。 该排序算法是一个经过修改的合并排序算法(其中,如果低子列表中的最高元素小于高子列表中的最低元素,则忽略合并)。此算法提供可保证的 n*log(n) 性能。 参数:
抛出:
|
下面上实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 |
|
结果如下:
1 2 3 4 5 6 7 8 |
|
二. java.util.Collections中的静态方法的Collections.sort()
java.util.Collections中的静态方法的Collection.sort()主要是针对集合框架中的动态数组,链表,树,哈希表等( ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap )进行排序。
关于Comporator 的介绍和上面相同,主要是针对里面compare()的重写
下面上实例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
|
结果如下:
1 2 3 4 |
|
最后,上面的两个实例只要改变相应的待排序数据的形式(数组,集合),都可以替换使用。
转自:java中排序函数sort()使用,Arrays.sort()和Collections.sort() - 樟樟22 - 博客园