`
l540151663
  • 浏览: 185747 次
  • 性别: Icon_minigender_1
  • 来自: 浙江
社区版块
存档分类
最新评论

Comparator自定义排序的使用

 
阅读更多
java对于集合的自定义排序方法有:

Arrays.sort(T[],Comparator<? super T> c);
Collections.sort(List<T> list,Comparator<? super T> c);

这里记录下对Comparator的自己理解。

Demo代码如下:

1.实体类代码:
class SortObj {

        String letter;
        int num;

        public SortObj(String letter, int num) {
            this.letter = letter;
            this.num = num;
        }

    }


2.Comparator的实现代码,两个类分别为:
/**
     * 字符排序(#排于最后)
     */
    class StrComparator implements Comparator<SortObj> {

        @Override
        public int compare(SortObj o1, SortObj o2) {
            if("#".equals(o1.letter) && "#".equals(o2.letter)){
                return 0;
            }else if("#".equals(o1.letter)){
                return 1;
            }else if("#".equals(o2.letter)){
                return -1;
            }
            return o1.letter.compareTo(o2.letter);

        }
    }

    /**
     * 数字排序 (升序)
     */
    class NumComparator implements Comparator<SortObj> {

        @Override
        public int compare(SortObj o1, SortObj o2) {

            if(o1.num > o2.num){
                return 1;
            }else if(o1.num < o2.num){
                return -1;
            }else{
                return 0;
            }
        }
    }

3.调用排序并展示:
findViewById(R.id.btn_num_sort).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Collections.sort(dataNum, new NumComparator());
                printInfo(dataNum);
            }
        });

        findViewById(R.id.btn_str_sort).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Collections.sort(dataStr, new StrComparator());
                printInfo(dataStr);
            }
        });

显示结果如下:
数字排序:
SortTest: (b,1) (r,2) (a,2) (a,3) (#,4) (#,5)
字符排序:
SortTest: (a,3) (a,2) (b,1) (r,2) (#,4) (#,5)


排序算法在compare中执行:
返回结果为3种:正整数(1),负整数(-1),0

自己对返回结果的理解(纯属自己的看法):
这个有点冒泡排序的意思,当为正整数时,交换o1与o2的位置,当为负整数时,不换位置
分享到:
评论

相关推荐

    Compable和Comparator自定义对象属性排序

    可以通过两种方式自定义对象的属性大小进行比较,对一个list或数组对根据属性排序一个list或数组

    详解JAVA使用Comparator接口实现自定义排序

    总之,Comparator接口在Java中提供了强大的工具来实现自定义排序。它不仅能够满足简单的排序需求,也能够处理复杂的排序场景。通过灵活使用Comparator接口,我们能够为不同类型的对象集合定义各种排序规则,使得数据...

    lucene自定义排序实现

    因此,了解如何在 Lucene 中实现自定义排序是非常关键的。在这个话题中,我们将深入探讨如何根据特定的业务需求对搜索结果进行定制排序。 首先,我们要明白 Lucene 默认的排序机制。默认情况下,Lucene 搜索结果是...

    程序实现时间排序Comparator

    通过以上分析,我们可以看到Java中的`Comparator`接口是如何被用于自定义排序规则的。它不仅提供了灵活性,还增强了代码的可读性和维护性。在处理复杂数据结构时,合理利用`Comparator`能够显著提高代码的效率和质量...

    MapReduce2中自定义排序分组

    总之,自定义排序和分组在 MapReduce2 中是通过自定义 Partitioner、Comparator 和 WritableComparator 实现的。这允许开发人员根据业务需求灵活地调整数据处理流程,提高数据处理的效率和准确性。在实际项目中,...

    mapreduce wc单词计数 自定义分区 自定义排序实现

    接下来,我们来看看自定义分区(Custom Partitioner)和自定义排序(Custom Comparator)的实现: **自定义分区(Custom Partitioner)**: 默认情况下,MapReduce会根据键的哈希值将数据均匀地分发到不同的Reducer...

    String,number,String+number的Comparator排序

    如果需要自定义排序规则,如按绝对值排序或负数在前正数在后,可以创建`Comparator&lt;Number&gt;`。同样,`compare()`方法是关键,它接收两个`Number`实例并返回一个整数,指示它们的顺序。 最后,`String+number`的排序...

    Java中的Comparator 对多个排序条件的处理

    在Java编程中,`Comparator`接口是用于比较对象的关键工具,尤其在进行自定义排序时。这个接口提供了`compare()`方法,根据特定的规则来决定两个对象的相对顺序。当需要根据多个排序条件对集合进行排序时,可以使用...

    Comparator 排序器

    它可以轻松地为任何类型的对象提供自定义排序逻辑。这对于处理复杂的数据结构或需要特定排序规则的应用场景来说非常有用。此外,由于`Comparator`允许传递多个实例,因此可以很容易地实现多级排序或其他更复杂的排序...

    java排序Comparator和Comparable

    使用`Comparator`排序时,可以传递给`Collections.sort()`或`Arrays.sort()`方法,例如: ```java List&lt;MyObject&gt; list = ...; Collections.sort(list, new MyComparator()); ``` 此外,`Comparator`还可以通过...

    Java用Comparator来排序.pdf

    本文将深入探讨如何使用Comparator接口来对Java列表进行自定义排序,并介绍相关的编程概念。 首先,`Comparator`接口在Java中扮演着重要的角色,它允许用户自定义对象的比较规则。`Comparator&lt;T&gt;`接口有一个核心...

    挂号法-自定义数据数组排序.rar

    比较函数或比较器是自定义排序的核心,它定义了如何比较两个元素并决定它们的相对顺序。 4. **排序算法**:挂号法可能是一种特定的排序算法,但常见的一些排序算法如冒泡排序、插入排序、选择排序、快速排序、归并...

    List对象集合的排序:比较器Comparator(简单例子)

    当需要对`List`中的对象进行自定义排序时,`Comparator`接口就派上了用场。`Comparator`是一个可以比较两个对象的类,它提供了一种方式来定义自定义的比较规则,从而实现灵活的排序逻辑。 `Comparator`接口位于`...

    Java排序算法包 支持自定义比较条件

    - 当内置的排序规则不能满足需求时,可以使用`Comparator`接口来自定义比较逻辑。`Comparator`接口包含一个`compare()`方法,返回值决定了两个对象的相对顺序。 - 用户需要实现`Comparator`接口并重写`compare()`...

    java Lucene 中自定义排序的实现

    Lucene中的自定义排序功能和Java集合中的自定义排序的实现方法差不多,都要实现一下比较接口. 在Java中只要实现Comparable接口就可以了.但是在Lucene中要实现SortComparatorSource接口和ScoreDocComparator接口.在...

    java使用stream对日期排序

    如果需要自定义排序规则,可以创建一个`Comparator&lt;LocalDate&gt;`实例。 4. 自定义日期排序: 如果需要按照特定规则(例如,先按月份排序,再按日期排序)排序,可以这样实现: ```java List&lt;LocalDate&gt; ...

    493.491.JAVA基础教程_常用类-使用Comparator实现定制排序(493).rar

    标准库提供了多种排序方式,其中一种是使用`Comparator`接口来实现自定义排序。本教程将深入探讨如何使用`Comparator`来实现对对象集合的定制排序。 `Comparator`接口位于`java.util`包下,它定义了一个方法`...

    JTable表头排序的两种方法

    2. **设置比较器(Comparator)**:为每一列设置一个自定义的`Comparator`对象,该对象用于确定数据的排序顺序。 3. **注册监听器(MouseListener)**:添加`MouseListener`监听表头点击事件,当用户点击表头时,...

    参考资料-8、按照自定义的序列排序.zip

    在Python中,可以自定义排序键(key)函数,如使用`sorted()`函数配合`lambda`表达式。在Java中,可以实现`Comparator`接口来指定排序规则。在SQL中,可以使用`CASE`语句来定义排序顺序。 在数据分析和数据科学领域...

    java竞赛中各种自定义排序模板

    在Java编程语言中,特别是在算法竞赛的环境下,经常会遇到需要对数据进行自定义排序的情况。以下将详细讲解三种常见的自定义排序方式: 1. **对象数组排序**: Java不支持像C++那样的结构体,因此当需要处理具有多...

Global site tag (gtag.js) - Google Analytics