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

相关推荐

  • 应用程序中的服务器错误怎么解决_web服务器和http服务器

    应用程序中的服务器错误怎么解决_web服务器和http服务器在SEO工作的过程中,我们偶尔会遇到HTTP500内部服务器错误,这样的问题,它是一个明显的HTTP状态码,它在告知站长,你的网站与服务器某些配置一定出现问题。从SEO的角度,如果你不能够及时解决相关问题,那么你的网站会面临短期内与百度爬虫失去链接,时间长久的话,会严重影响网站的相关排名。那么,如何解决,HTTP500内部服务器错误?根据以往SEO网站诊断的经历,蝙蝠侠IT,将通过如下内容,进行浅…

    2022年8月11日
  • vim 配置python3环境_vim怎么运行python

    vim 配置python3环境_vim怎么运行python1.1环境OS:CentOSLinuxrelease7.6.1810(Core)python版本:Python3.9.6需求:配置vim使能支持python程序开发的类似IDE环境,实现代码不全、语法高亮等功能。1.2检查环境1.检查vim版本,如果没有“+python3”关键字,则需要升级vim#可见vim版本为7.4[root@drp-monitor-20210426165633-mojh~]#vim–versionVIM-ViIMproved7.4(201

    2022年9月29日
  • 计算机中的虚拟ip,如何设置电脑虚拟IP[通俗易懂]

    计算机中的虚拟ip,如何设置电脑虚拟IP[通俗易懂]2020-02-29阅读(86)“全国统一价”其本意是根据企业产品的成本、销售渠道、品牌价值、利润所得出的,是正规生产企业规范销售市场,保护品牌形象的一种控制手段。在现实生活中,生产商打出的所谓“全国统一零售价”充其量只能理解成对产品的指导价。从某种程度上2020-02-29阅读(104)1.火烧新野。曹操统一了北方后,南下攻打刘备,此时刘备投靠刘表,驻扎在新野,曹操派大将夏侯惇进攻新野,这时刘备…

    2022年10月12日
  • 详解快速排序算法

    详解快速排序算法基本思想本文的思路是以从小到大为例讲的。快速排序的基本思想是任取待排序序列的一个元素作为中心元素(可以用第一个,最后一个,也可以是中间任何一个),习惯将其称为pivot,枢轴元素;将所有比枢

    2022年7月1日
  • java getclassloader_Java Class getClassLoader()方法[通俗易懂]

    java getclassloader_Java Class getClassLoader()方法[通俗易懂]JavaClassgetClassLoader()方法java.lang.Class.getClassLoader()方法返回的类加载器的类。一些实现可能使用null表示引导类加载器。如果这个类是由引导类加载器加载的方法在这样的实现将返回null。1语法publicClassLoadergetClassLoader()2参数无3返回值此方法返回加载此对象所表示的类或接口的类加载器。…

    2022年6月11日
  • Okhttp 之 okio

    Okhttp 之 okio本文是的前一篇文章OkhttpIO之Segment&amp;SegmentPool的基础上写的,如果你没看懂前面的文章,那么看本文会相当的吃力,因为很多关键的代码都是在前面这篇文章中剖析的。ByteStringokio中添加一个类ByteString,顾名思义就是字节串,这里做一个概要的讲解,具体的实现大家可以去看源码。既然是字节串,它内部就是用一个字节数组支持的。…

    2022年6月9日

发表回复

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

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