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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java转化为string_php有必要转java吗

    java转化为string_php有必要转java吗Stringdatas=“{key:value,key2:value2}”;JSONObjectjsonObject=JSONObject.parseObject(datas);1.上面的代码是把json字符串转化为json对象jsonObject.put(“key3″,”value3”);2.上面的代码对其进行赋值ObjectexO1=JSON.to…

    2022年8月23日
    11
  • html.dropdownlistfor_see的用法

    html.dropdownlistfor_see的用法常用方法后台代码:publicActionResultIndex(){ViewData[“deptOu”]=”SOHO”;using(ISessionsession=newNHibernateHelper(DataBase.ADDB).OpenSession()){IList<t_data_DeptOU>dep…

    2022年10月10日
    2
  • Coordinator Layout使用

    Coordinator Layout使用

    2021年6月17日
    117
  • L3-001 凑零钱(回溯和0-1背包)[通俗易懂]

    L3-001 凑零钱(回溯和0-1背包)[通俗易懂]韩梅梅喜欢满宇宙到处逛街。现在她逛到了一家火星店里,发现这家店有个特别的规矩:你可以用任何星球的硬币付钱,但是绝不找零,当然也不能欠债。韩梅梅手边有 10​4​​ 枚来自各个星球的硬币,需要请你帮她盘算一下,是否可能精确凑出要付的款额。输入格式:输入第一行给出两个正整数:N(≤10​4​​ )是硬币的总个数,M(≤10​2​​ )是韩梅梅要付的款额。第二行给出 N 枚硬币的正整数面值。数字间以空格分隔。输出格式:在一行中输出硬币的面值 V​1​​ ≤V​2​​ ≤⋯≤V​k

    2022年8月8日
    5
  • HQChart实战教程41 -新浪+腾讯A股数据源对接 – uniapp版本 (源码付费)「建议收藏」

    HQChart实战教程41-新浪+腾讯A股数据源对接-uniapp版本数据源支持周期平台支持demo安卓apk下载源码售价580元效果截图HQChart代码地址数据源使用公开的新浪+腾讯的A股票Api数据,h5页面需要自己配代理跨域.app直接就可以访问,无需自己提供数据后台.支持周期分时,5日,日K,周K,1分钟K,5分钟K,15分钟K,30分钟K,36分钟K平台支持uniapp开发,支持h5和appdemo安卓apk下载https://opensource

    2022年4月15日
    88
  • keypad 按键响应流程解析「建议收藏」

    keypad 按键响应流程解析「建议收藏」一、keypad驱动,接收按键事件并将按键值转换为Linuxcode上发。二、如何一层层上传到Android系统的控件中。

    2022年5月20日
    47

发表回复

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

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