`
l540151663
  • 浏览: 181051 次
  • 性别: 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接口实现自定义排序

    主要介绍了JAVA使用Comparator接口实现自定义排序,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    java Lucene 中自定义排序的实现

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

    gulp-sort:按路径或任何自定义排序比较器对流中的文件进行排序

    排序按路径或任何自定义排序比较器对流中的文件进行排序安装$ npm install gulp-sort --save-dev 用法var sort = require ( 'gulp-sort' ) ;// default sortgulp . src ( './src/js/**/*.js' ) . pipe ( sort ( ) ) ...

    java排序代码

    由Comparator实现类对象负责集合元素的排序逻辑。 // 自定义比较器 class MyTreeSetCompartor implements Comparator { // 实现compare方法 @Override public int compare(Object o1, ...

    Java中Comparator接口与Comparable接口的区别

    1. Comparator 和 Comparable 相同的地方  他们都是java的一个接口, 并且是用来对自定义的class比较大小的,  什么是自定义class: 如 public class Person{ String name; int age }.  当我们有这么一个...

    java集合-TreeSet的使用

    或者,可以在创建 TreeSet 时提供一个比较器(Comparator)来指定自定义的排序规则。 唯一性:TreeSet 中不允许重复元素,每个元素都必须是唯一的。如果将重复元素添加到 TreeSet 中,后面的重复元素将被忽略。 ...

    Java 集合方面的面试题

    如何使用 Collections 类对集合进行排序? 什么是 Comparable 和 Comparator 接口?它们有什么区别? 如何使用 ConcurrentHashMap 类来实现线程安全的映射? 如何避免在多线程环境下对同一集合的并发修改? 如何使用...

    Java学习路线:day21

    文章目录第9章Java常用类IDEA中Debug调试JDK 8之前的日期时间API(`...与传统日期处理的转换Java比较器概述Comparable自然排序举例自定义类实现Comparable自然排序使用Comparator实现定制排序System类、Math类、BigInte

    NDDB:Javascript轻量级N维数据库

    易于使用的api,详细的文档和广泛的测试范围,对开发人员友好。 功能清单 选择: select , and or 排序: sort , reverse , last , first , limit , distinct , shuffle 索引: view , index , hash , ...

    JIDE Grids (表格)开发员技术手册

    归一化的对象比较机制(Centralized object comparator mechanism )-自定义对象的比较,并能在排序时被排序表使用 表实用类TableUtils class - 收集一些JTable有用功能的实用类。 集合实用类ListUtils class -...

    浅谈JsonObject中的key-value数据解析排序问题

    要想实现排序,目前只能通过加装一层处理(方法来自Stack Overflow,感谢大神),将key-vlaue放入ThreeMap排序,排序规则默认是字母表顺序,可自定义Comparator修改。 iteratorKeys = object.keys();//得到所有title...

    ubersort:可配置的基于优先级的排序

    使用bower install --save ubersort 内置比较器文本比较区分大小写字符串数值按数值比较自定义Array.prototype.ubersort.addComparator添加的函数(见下文)方法超级排序( sortConfig ) myArr . ubersort ( { ...

    java8集合源码分析-Lambda-In-Java:Lambda在java代码中的运用和一些分析

    使用Comparator接口排序 自定义接口实现 forEach filter过滤删选 Predicate(准备条件) 并行处理和顺序处理 探讨Lambda是否为语法糖 语法 (1) 形参列表。如果没有参数()表示 (2) -&gt; (3) 代码块 用Lambda语法写...

    Java8

    如果要自定义排序顺序,请使用Comparator界面,而不要使用默认自然排序顺序。 比较器接口仅包含一种抽象方法:compare()因此,它是功能接口。 公共int compare(obj1,obj2) 如果obj1必须在obj2之前,则返回-ve...

    java常用工具类的使用

    该类的大部分构造器和方法都已经过时,但是该类使用非常方便,因此目前使用还很普遍,该类的另一个主要功能是,在数据库操作中,它允许将毫秒值表示为SQL DATE值,是数据库操作中java.sql.Date的父类。关于数据库...

    red_black_tree:Elixir的红黑树实现

    红黑树 Elixir的红黑树实现。... 可以在初始化时通过:comparator选项提供自定义比较:comparator 。 例如,假设我们要存储包含订单信息的地图,这些地图按产生的收入排序,按ID唯一。 我们将使用RedBlackTree.compare

    ngx-order-pipe:▼Angular 5+订单通过管道

    {{ collection | orderBy: expression : reverse : caseInsensitive : comparator }} 争论 参数 类型 默认值 细节 收藏 array或object 要排序的集合或对象 表达 string或string array 确定顺序的键或键集合 反向...

    more-collections:该项目旨在通过Lambda表达式改善Java 8中的排序

    Project旨在通过Lambda表达式改进Java 8中的排序,同时假装java.util.Comparator中的静态方法不存在。 排序自定义类型的集合 class Person { public Integer id; public String firstName; public String ...

    leetcode矩阵旋转任意角度-Algorithm:算法

    数组具有随机访问特性,灵活使用数组的索引 数组有序的话,问题往往会变得简单 对于有序或局部有序的一维数组,要想到二分查找算法,并学会随机应变 对于元素特殊的数组,注意寻找特殊点,比如有序的临界点,二维数组...

Global site tag (gtag.js) - Google Analytics