JAVA排序算法 -- Arrays.sort()

在文章开始之前先来讲讲 sun.misc 包下悲催的少年 sun.misc.Sort和sun.misc.Compare
oracle 发表声明,由于此包下的 Sort 和 Compare 不和被公开支持,而且不能在所有 JVM 间移植,所以开发人员不应该使用这个包。在 OpenJDK 核心库开发邮件列表的成员一致同意后,Oracle 决定把它们从 JDK 中删除了。转而使用 Arrays.sort() 代替
更悲催的是 , 在我负责的一个大数据检索项目中 , 使用的正式这种已经被删除的排序算法 . 所以在之后的日子里 , 不得不翻翻 java Arrays 的 API 了 .
Arrays.sort() , 如果你直接在使用基本数据类型数组或集合, 那么他将默认按值的大小从小到大排序 , 但 Arrays.sort() 中还有一个功能更强大的方法
Arrays.sort(array, comparator);需要注意的是你不能直接

    Arrays.sort(a, new Comparator() {
            @Override
            public int compare(T o1, T o2) {
                // TODO Auto-generated method stub
                return 0;
            }
        }); 

我们只能新建一个类实现 Comparator 接口和排序规则后使用它

当然 Arrays.sort(array, comparator); 也可以直接使用已有的规则
如:

Collator.getInstance(Locale.CHINESE)//按照中文拼音顺序排序,生僻字无效

更多排序规则在 Collator.getInstance(Locale.*) 查看

基本数据类型我们可以直接用

//class Test
 @Override
    public int compare(Object o1, Object o2) {
       //return o1.compareTo(o2);
        return Integer.valueOf(o1) - Integer.valueOf(o2);
    }
Arrays.sort(array, new Test()); 

排序
如果需要转换成实体的话

 @Override
    public int compare(Object o1, Object o2) {
       //return ((YourEntity)o1).getName.compareTo(((YourEntity)o2).getName);
        return Integer.valueOf(((YourEntity)o1).getAge) - Integer.valueOf(((YourEntity)o1).getAge);
    }
Arrays.sort(YourEntity[], new Test()); //第一个参数传入你想排序的数组

Array.sort() 仅接受 T[] , 如果你是一个集合 , 用Collections.sort() , 除了支持的参数 , 他们用法相似

你可能感兴趣的:(算法)