栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java自定义排序简单总结

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java自定义排序简单总结

简单总结

默认情况下:Java实现Comparator排序是升序,即自然排序

根据参数,返回值来判断是否交换

对于a,b两个参数(a在前,b在后)

jdk官方的升序基于:

< return -1
> return 1
= return 0

降序就是反过来

< return 1
> return -1
= return 0

底层源码的实现可参考:java comparator 升序、降序、倒序从源码角度理解

如果要升序:那么a

如果要降序:那么a

为了方便记忆,总结了如下的规律:

    当不管大于、小于、等于时,我们都返回 -1,那么就是倒序。当不管大于、小于、等于时,我们都返回0或者1时,效果是一样的,就是不排序。但是0表示的是,相同元素不排序,要是我们把等于返回为-1,那么两个相同的元素会交互顺序;当需要返回-1、1、0时,返回1的时候进行位置交换。
升序
ArrayList< Integer > list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
list.add(4);
list.add(8);
list.add(8);
list.sort(new Comparator< Integer >() {
    @Override
    public int compare(Integer o1, Integer o2) {
        // 升序 返回1的时候进行位置交换
        if (o1 < o2) {
            return -1;
        } else if (o1 > o2) {
            return 1;
        } else {
            return 0;
        }
    }
});
System.out.print("排序后 = ");
for (int i = 0; i < list.size(); i++) {
    Integer integer = list.get(i);
    System.out.print(integer);
    if (i != list.size() - 1) {
        System.out.print("、");
    }
}
// 结果
// 排序后 = 1、2、3、4、8、8
降序
ArrayList< Integer > list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
list.add(4);
list.add(8);
list.add(8);
list.sort(new Comparator< Integer >() {
    @Override
    public int compare(Integer o1, Integer o2) {
        // 降序 返回1的时候进行位置交换
        if (o1 > o2) {
            return -1;
        } else if (o1 < o2) {
            return 1;
        } else {
            return 0;
        }
    }
});
System.out.print("排序后 = ");
for (int i = 0; i < list.size(); i++) {
    Integer integer = list.get(i);
    System.out.print(integer);
    if (i != list.size() - 1) {
        System.out.print("、");
    }
}
// 结果
// 排序后 = 8、8、4、3、1、2
倒序
ArrayList< Integer > list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
list.add(4);
list.add(8);
list.add(8);
list.sort(new Comparator< Integer >() {
    @Override
    public int compare(Integer o1, Integer o2) {
        //不管大于、小于和等于 都返回 -1
        return -1;
    }
});
System.out.print("排序后 = ");
for (int i = 0; i < list.size(); i++) {
    Integer integer = list.get(i);
    System.out.print(integer);
    if (i != list.size() - 1) {
        System.out.print("、");
    }
}
// 结果
// 排序后 = 8、8、4、3、1、2
不变

假设不管大于、小于、等于,我们都返回0 ,会发现顺序没有变;而且你会发现,要是都返回1的话,顺序也是没有变的!

当不管大于、小于、等于时,我们都返回一个值时,0和1效果是一样的,就是不排序;-1就是倒序。

ArrayList< Integer > list = new ArrayList<>();
list.add(2);
list.add(1);
list.add(3);
list.add(4);
list.add(8);
list.add(8);
list.sort(new Comparator< Integer >() {
    @Override
    public int compare(Integer o1, Integer o2) {
        // 返回0或者1的时候不排序
        return 1;
    }
});
System.out.print("排序后 = ");
for (int i = 0; i < list.size(); i++) {
    Integer integer = list.get(i);
    System.out.print(integer);
    if (i != list.size() - 1) {
        System.out.print("、");
    }
}
// 结果
// 排序后 = 2、1、3、4、8、8

其实0表示的是,相同元素不排序,要是我们把等于返回为-1,那么两个相同的元素会交互顺序;

对数字而言交换顺序没有关系,但是里面要是是Map对象的话,那就有关系,因为有时我们是希望相同元素不进行顺序调整的。

代码链接:ComparatorDemo

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/781267.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号