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)
上一篇 2022年7月15日 下午8:00
下一篇 2022年7月15日 下午8:16


相关推荐

  • 原地算法矩阵置0_矩阵归一化处理

    原地算法矩阵置0_矩阵归一化处理给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。进阶:一个直观的解决方案是使用 O(mn) 的额外空间,但这并不是一个好的解决方案。一个简单的改进方案是使用 O(m + n) 的额外空间,但这仍然不是最好的解决方案。你能想出一个仅使用常量空间的解决方案吗?示例 1:输入:matrix = [[1,1,1],[1,0,1],[1,1,1]]输出:[[1,0,1],[0,0,0],[1,0,1]]示例 2:输入:matrix

    2022年8月9日
    7
  • springcloud eruka刷新时间配置实战「建议收藏」

    springcloud eruka刷新时间配置实战「建议收藏」由于在使用springclouderuka时,服务注册和发现,默认配置往往不能满足及时性的要求,搜集整理了一篇配置。请多多指教server.port=7001spring.application.name=eureka-servereureka.client.serviceUrl.defaultZone=http://localhost:7002/eureka/eureka.client.registerWithEureka=trueeureka.client.fetchRegistry=t

    2022年8月21日
    10
  • STM32中文参考手册_STM32读取ESP8266数据

    STM32中文参考手册_STM32读取ESP8266数据http://blog.csdn.net/u012722571/article/details/47295245lanmanck原创】这篇文章已经说了STM32的启动过程:http://blog.csdn.net/lanmanck/article/details/8252560我们也知道怎么跳到main函数了,那么,中断发生后,又是怎么跑到中断入口地址的呢?从stm

    2025年7月27日
    2
  • 在pycharm中切换python版本的方法

    在pycharm中切换python版本的方法在 pycharm 中切换 python 版本的方法切换 python2 和 python3 版本切换 python2 和 python3 版本

    2026年3月27日
    2
  • 深度学习#1.有监督学习和无监督学习

    深度学习#1.有监督学习和无监督学习机器学习#1.有监督学习和无监督学习人工智能与机器学习与深度学习机器学习有监督学习无监督学习人工智能与机器学习与深度学习什么是人工智能?人类用各种方式让机器拥有与人类相仿的“智能”,就是人工智能。什么是机器学习?机器学习就是实现人工智能的一种方式。什么是深度学习?深度学习就是实现机器学习的一种技术。机器学习为什么要机器学习呢?你想啊,人类这么聪明是为什么,还不是因为在整个人类历史…

    2022年5月27日
    47
  • HTMLTestRunner源码

    HTMLTestRunner源码#-*-coding:utf-8-*-“””ATestRunnerforusewiththePythonunittestingframework.ItgeneratesaHTMLreporttoshowtheresultataglance.Thesimplestwaytousethisistoinvokeitsmain…

    2025年7月5日
    4

发表回复

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

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