Comparable和Comparator的比较用法

一、Comparable的用法

当对java中的某个类的对象要进行排序比较,有两种实现方法,第一种就是类实现Comparable接口,重写compareTo方法,编写排序的逻辑。下面介绍这种方法:

举例:

 1 package com.guolele.web.util;
 2
 3 /**
 4  * Created by luotong 2016/8/22.
 5  */
 6 public class Person implements Comparable<Person>{
 7     private String name;
 8     private int age;
 9     private int sal;
10
11     public Person() {
12     }
13
14     public Person(int age,String name,int sal) {
15         this.age = age;
16         this.name = name;
17         this.sal = sal;
18     }
19
20     public String getName() {
21         return name;
22     }
23
24     public void setName(String name) {
25         this.name = name;
26     }
27
28     public int getAge() {
29         return age;
30     }
31
32     public void setAge(int age) {
33         this.age = age;
34     }
35
36     public int getSal() {
37         return sal;
38     }
39
40     public void setSal(int sal) {
41         this.sal = sal;
42     }
43
44     @Override
45     public int compareTo(Person p) {
46         // 先按年龄排,再按姓名排,再按工资排
47         int com = Integer.valueOf(this.age).compareTo(Integer.valueOf(p.age));
48         if (com != 0) {
49             return com;
50         }
51         com = this.name.compareTo(p.name);
52         if (com != 0) {
53             return com;
54         }
55         return Integer.compare(this.sal,p.sal);
56     }
57 }

二、自定义比较器,实现Comparator接口

自定义比较器更加的灵活,实现Comparator接口去要重写compare方法

举例:

 1 package com.guolele.web.util;
 2
 3 import java.util.Comparator;
 4
 5 /**
 6  * Created by luotong on 2016/8/22.
 7  *
 8  * 自定义比较器
 9  */
10 public class PersionComparator implements Comparator<Person>{
11
12     @Override
13     public int compare(Person p1, Person p2) {
14         // 先按年龄排,再按姓名排,再按工资排
15         int com = Integer.valueOf(p1.getAge()).compareTo(Integer.valueOf(p2.getAge()));
16         if (com != 0) {
17             return com;
18         }
19         com = p1.getName().compareTo(p2.getName());
20         if (com != 0) {
21             return com;
22         }
23         return Integer.compare(p1.getSal(),p2.getSal());
24     }
25 }

三、利用Guava中的ComparisonChain抽象类实现多个属性排序

上面的两种方式代码更加的琐碎,容易搞乱,也不容易调试,而使用Guava的ComparisonChain抽象类的Fluent风格可读性更高,发生错误编码的几率更小。

举例:

package com.guolele.web.util;

import com.google.common.collect.ComparisonChain;

import java.util.Comparator;

/**
 * Created by luotong on 2016/8/22.
 *
 * 自定义比较器,利用Guava中的ComparisonChain抽象类实现
 */
public class PersionComparator implements Comparator<Person>{

    @Override
    public int compare(Person p1, Person p2) {
        // 先按年龄排,再按姓名排,再按工资排
        return ComparisonChain.start()
                .compare(p1.getAge(), p2.getAge())
                .compare(p1.getName(),p2.getName())
                .compare(p1.getSal(),p2.getSal())
                .result();
    }
}
时间: 2024-11-05 21:01:27

Comparable和Comparator的比较用法的相关文章

java集合中Comparable和Comparator辨析

一.Comparable和Comparator简介 在对集合元素进行比较时一般使用TreeSet.对于简单的数据类型,TreeSet可以直接进行比较.但是对于复杂的数据类型,比如自己定义的数据类型或者类,就需要自己设置比较方法与比较规则了,这时就需要使用Comparable和Comparator. Comparable和Comparator都是用来实现集合中的排序的,只是Comparable是在集合内图定义的方法实现排序,而Comparator是在集合外部实现的排序.所以如果想对结合排序,需要在

Comparable与Comparator,java中的排序与比较

1:比较和排序的概念 比较:两个实体类之间按>,=,<进行比较. 排序:在集合类中,对集合类中的实体进行排序.排序基于的算法基于实体类提供的比较函数. 基本型别都提供了默认的比较算法,如string提供了按字母进行比较,int提供了按整数大小进行比较. 2:Comparable与Comparator but,在软件开发的世界中,任何没有代码的堆概念都是耍流氓.所以,无论我们解释的多么完美,必须show me the code: 我们首先看这样一段代码: public class Collect

Comparable 和Comparator

comparable在java.lang下 comparator在java.util下 Comparable 和Comparator详解及 区别 comparator用法 原文地址:https://www.cnblogs.com/10zhang/p/8940709.html

Java核心API -- 7(Iterator迭代器、Comparable、Comparator比较器)

1. Iterator迭代器 所有Collection的实现类都实现了iterator方法,该方法返回一个Iterator接口类型的对象,用于实现对集合元素迭代的便利.在java.util包下. 1)Iterator定义有三个方法: ①boolean hasNext()方法:判断指针后面是否有元素. ②E next()方法:指针后移,并返回当前元素.E代表泛型,默认为Object类型. ③void remove()方法:在原集合中删除刚刚返回的元素. 2)对于List集合而言,可以通过基于下标的

Java中Comparable和Comparator实现对象比较

1.通过Comparable实现排序 package Comparable; import java.util.Arrays; public class ComparableUser implements Comparable<ComparableUser> { private String id; private int age; public ComparableUser(String id, int age) { this.id = id; this.age = age; } publi

java 数组比较,元素的比较,Comparable,Comparator比较的应用实现,排序,查找示例

java 数组比较,元素的比较,自定义Comparator的实现,排序,查找示例 package org.rui.array.compar; import java.util.Arrays; import java.util.Random; import org.rui.generics.anonymity.Generator; /** * 程序设计的基本目标是"将保持不变的事物与会发生改变的事物相分离" * 而这是,不变的是通用的排序算法,变化的是各种对象相互比较的方式, * 因此,

对象大小对比之Comparable与Comparator

一 概述 1.Comparable与Comparator使用背景 数值型数据(byte int short long float double)天生可对比大小,可排序,String实现了Comparable接口也可以对比大小与排序,而自定义类多种多样,没有一个共有的可以用作排序的指标,因此需要在自定义类中手动建立对比的方法,出于这个目的,java提供了两个接口Comparable与Comparator. 2.集合排序 Collections.sort()底层排序依靠的是Arrays.sort()

comparable 与 comparator

工作时间久了,偶尔会迷糊..... comparable 与 comparator 区别:(策略模式) 一般需要比较或者排序的类,都需要实现 comparable ,实现comparable就需要去重写 compareto方法,一般需要在这个方法里写明具体需要怎么比较,那么问题来了,如果以后类的比较方式变了的话,这个compareto方法就需要修改: 故根据策略模式,将需要比较的具体实现交给comparator接口,需要具体比较的话就实现comparator接口重写compare方法,返回int

java Comparable和Comparator

在java数组.Collection和Map的排序中,经常会用到Comparable和Comparator这两个接口. 1.Comparable 我们可以通过Arrays.sort()方法给数组排序: public static void main(String[] args) { int[] intArr={1,5,7,6,3,4}; Arrays.sort(intArr); System.out.println(Arrays.toString(intArr)); /* output: [1,