java sort排序[通俗易懂]

java sort排序[通俗易懂]栗子默认的sort方法,根据元素的自然顺序,将指定的列表按升序排序。第二个方法,根据指定比较器产生的顺序对指定的列表进行排序。快速记忆法参考当前对象与后一个对象进行比较,如果比较结果为1进行交换,其他不进行交换。当后一个对象比当前对象大,返回结果值为1时,前后交换,说明是倒序排列。当后一个对象比当前对象小,返回结果值为1时,前后交换,说明是升序排列。//Integ…

大家好,又见面了,我是你们的朋友全栈君。

Java中Comparable和Comparator区别小结

栗子

默认的sort方法,根据元素的自然顺序,将指定的列表按升序排序12345。
注:倒序54321
第二个方法,根据指定比较器产生的顺序对指定的列表进行排序。
jdk1.7API

快速记忆法

参考
当前对象与后一个对象进行比较,如果比较结果为1进行交换,其他不进行交换。

当后一个对象比当前对象大,返回结果值为1时,前后交换,说明是倒序排列。

当后一个对象比当前对象小,返回结果值为1时,前后交换,说明是升序排列。

即,前一个数-后一个数,大于0,前后交换,说明是升序排列。

        //Integer集合,正序排序
        List<Integer> list = new ArrayList<Integer>(Arrays.asList(10, 3, 6, 1, 4, 5, 9));
        Collections.sort(list, new Comparator<Integer>() {
            @Override
            public int compare(Integer t1, Integer t2) {
                return t1 - t2;//t1-t2>0
            }
        });

比如下面,根据创建时间倒序排序,即数字大的在最前面,对于时间来讲,越大就是距离现在越近的。所以后被创建的会排在前面

                    Collections.sort(group.getWorkDetails(), new Comparator<IWorkDetail>() {
                        @Override
                        public int compare(IWorkDetail o1, IWorkDetail o2) {
                            return (int) (o2.getCreateDate().getTime() - o1.getCreateDate().getTime());
                        }
                    });

1.什么是Comparable接口

此接口强行对实现它的每个类的对象进行整体排序。此排序被称为该类的自然排序 ,类的 compareTo 方法被称为它的自然比较方法 。实现此接口的对象列表(和数组)可以通过 Collections.sort (和 Arrays.sort )进行自动排序。实现此接口的对象可以用作有序映射表中的键或有序集合中的元素,无需指定比较器。 强烈推荐(虽然不是必需的)使自然排序与 equals 一致。所谓与equals一致是指对于类 C 的每一个 e1和 e2 来说,当且仅当 (e1.compareTo((Object)e2) == 0) 与e1.equals((Object)e2) 具有相同的布尔值时,类 C 的自然排序才叫做与 equals 一致 。

2.实现什么方法

int compareTo(T o)
比较此对象与指定对象的顺序。如果该对象小于、等于或大于指定对象,则分别返回负整数、零或正整数。

强烈推荐 (x.compareTo(y)==0) == (x.equals(y)) 这种做法,但不是 严格要求这样做。一般来说,任何实现 Comparable 接口和违背此条件的类都应该清楚地指出这一事实。推荐如此阐述:“注意:此类具有与 equals 不一致的自然排序。”

参数:
o – 要比较的对象。
返回:
负整数、零或正整数,根据此对象是小于、等于还是大于指定对象。
抛出:
ClassCastException – 如果指定对象的类型不允许它与此对象进行比较。

3.实例

package test1;

public class Note<T> implements Comparable<Note<T>> {

    private T data; //数据
    private int weight; //权值
    private Note<T> left; //左孩子
    private Note<T> right; //右孩子
    
    public Note(T data,int weight){
        this.data=data;
        this.weight=weight;
    }
    
    @Override
    public String toString(){
        return "data="+this.data+",weitht="+this.weight;
    }    
    
    public T getData() {
        return data;
    }
    public void setData(T data) {
        this.data = data;
    }

    public int getWeight() {
        return weight;
    }
    public void setWeight(int weight) {
        this.weight = weight;
    }

    public Note<T> getLeft() {
        return left;
    }
    public void setLeft(Note<T> left) {
        this.left = left;
    }

    public Note<T> getRight() {
        return right;
    }
    public void setRight(Note<T> right) {
        this.right = right;
    }
    
    
    /**
     * 倒序排列。
     */
    @Override
    public int compareTo(Note<T> o) {
        if(o.weight>this.weight){
            return 1;
        }else if(o.weight<this.weight){
            return -1;
        }
        return 0;
    }
    /**
     * 升序排列
     */
//    @Override
//    public int compareTo(Note<T> o){
//        if(this.weight>o.weight){
//            return 1;
//        }else if(this.weight<o.weight){
//            return -1;
//        }
//        return 0;
//    }

string排序


Java中compareTo()方法比较字符串详解

Collections.sort(stringList, new Comparator<String>() {
	@Override
	public int compare(String lhs, String rhs) {
		if (rhs == null) {
			return 1;
		}

		if (lhs == null) {
			return -1;
		}

		if (lhs.length() > rhs.length()) {
			return 1;
		}

		if (lhs.length() < rhs.length()) {
			return -1;
		}

		int i = lhs.compareTo(rhs);
		if (i > 0) {
			return 1;
		} else {
			return -1;
		}
	}
});
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/159877.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 用python实现植物大战僵尸(游戏截图+动态演示+源码分享)「建议收藏」

    用python实现植物大战僵尸(游戏截图+动态演示+源码分享)「建议收藏」大家好,我是梦执,对梦执着。希望能和大家共同进步!下面给大家带来python实现植物大战僵尸的的源码分享,只含有冒险模式。截图+动态演示+源码分享游戏截图动态演示源码分享state/tool.pystate/constants.pystate/main.py主执行文件main.py游戏截图动态演示源码分享state/tool.pyimportosimportjsonfromabcimportabstractmethodimportpygameaspg..

    2022年8月23日
    12
  • matlab潮流计算_凤凰传奇筷子兄弟最炫民族风

    matlab潮流计算_凤凰传奇筷子兄弟最炫民族风晚上看到个帖,matlab演奏卡农,眼前一亮,以前从没想过用matlab出声,作者真乃大牛。看到一条评论:卡农算什么,有本事来最炫民族风。。。。于是我就手贱了。。。花了几个小时。。。1/3在读懂卡农的程序,1/3在学习简谱知识(还好小学初中学过点),1/3在把简谱转换成代码。。。不多说,程序如下,欢迎试听哈:%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%Mosts…

    2022年9月22日
    3
  • linux(8)Linux 查看端口占用情况[通俗易懂]

    linux(8)Linux 查看端口占用情况[通俗易懂]前言平常使用linux,我们经常需要查看哪个服务占用了哪个端口,接下来就为大家介绍了2种Linux查看端口占用情况可以使用lsof和netstat命令。1.lsof-i:端口号用

    2022年7月30日
    8
  • 毕设开发日志2017-11-05[通俗易懂]

    毕设开发日志2017-11-05

    2022年3月12日
    37
  • 有计算机二级python证书可以做什么工作_python有证书考吗

    有计算机二级python证书可以做什么工作_python有证书考吗python以什么方式处理文件?很多同学想考python的证书,想知道Python有哪些含金量高的证书?一、全国计算机等级考试Python程序语言设计;二、PythonInstitute资格认证初级PCEP;三、PythonInstitute资格认证初级PCEP中级PCAP;四、PythonInstitute资格认证初级PCEP高级PCPP;五、工信部Python技术应用工程。毕业前最好都拿到手的证书,用处大!专业证书对于就读不同大学专业的同学而言,需要考取跟自己专业挂钩的专业证书,不相关的.

    2025年9月26日
    6
  • 猪脸识别!人工智能还能这么玩?

    猪脸识别!人工智能还能这么玩?黑马程序员视频库播妞微信号:heiniu526传智播客旗下互联网资讯、学习资源免费分享平台说到AI人工智能,很多人都会想到人脸识别,毕竟这是现实生活中接触最多的人工智能产品。只要轻轻一扫…

    2022年6月21日
    30

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号