java之比较器

java中的比较器有两种:

1、实体类实现Comparable接口,并实现其中的compareTo方法

2、在外部定义实现Comparator接口的比较器类,并实现其中的compare方法



Comparable接口

Person类源码:

package test;

public class Person implements Comparable<Person> {
    private Integer id;
    private String name;
    private Integer age;

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    @Override
    public int compareTo(Person person) {
        return name.compareTo(person.name);
    }

    public String toString() {
        return id + "\t" + name + "\t" + age;
    }

    public int getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

按名字进行排序,测试代码:

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ComparableTest {

    public static void main(String[] args) {
        List<Person> list = new ArrayList<Person>();
        list.add(new Person(1, "b", 13));
        list.add(new Person(2, "d", 12));
        list.add(new Person(3, "a", 12));
        list.add(new Person(4, "a", 21));
        Collections.sort(list);
        System.out.println("编号\t姓名\t年龄");
        for (Person p : list) {
            System.out.println(p);
        }
    }
}

打印:

可以看出人员根据名字排序,当名字相等时,不做处理。

若要当名字相等时,年龄按从大到小排序,则修改Person类的compareTo方法,代码如下:

    public int compareTo(Person person) {
        if (name.equals(person.name))
            return -(age.compareTo(person.age));
        return name.compareTo(person.name);
    }

打印:



Comparator接口

package test;

public class Person  {
    private Integer id;
    private String name;
    private Integer age;

    public Person(Integer id, String name, Integer age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String toString() {
        return id + "\t" + name + "\t" + age;
    }

    public int getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

自定义比较器PersonComparator类,代码如下:

package test;

import java.util.Comparator;

public class PersonComparator implements Comparator<Person> {

    public int compare(Person o1, Person o2) {
        return o1.getName().compareTo(o2.getName());
    }
}

测试代码:

package test;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ComparatorTest {
    public static void main(String[] args) {
        List<Person> list = new ArrayList<Person>();
        list.add(new Person(1, "b", 13));
        list.add(new Person(2, "d", 12));
        list.add(new Person(3, "a", 12));
        list.add(new Person(4, "a", 21));
        Collections.sort(list, new PersonComparator());
        System.out.println("编号\t姓名\t年龄");
        for (Person p : list) {
            System.out.println(p);
        }
    }
}

打印:

时间: 2024-10-03 13:46:18

java之比较器的相关文章

Java的比较器

package com.kk.Collection; import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.List; public class CompareTest { public static void main(String[] args) { List<Student> list=new ArrayList<Student>

java对象比较器和克隆

一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类 .我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要使用到.那么String类和自定义类能不能使用Arrays.sort()来进行排序呢.下面我们来试试,如下: Java代码 publicclassMystring { publicstaticvoidmain(String[] args) { String []a={"早上","

Java对象比较器对泛型List进行排序-Demo

针对形如:字段1 字段2 字段3 字段n 1 hello 26 7891 world 89 5562 what 55 4562 the 85 452 fuck 55 995 haha 98 455 以上类型的查询数据结果,需要对 字段3 进行求和分组(在SQL查询无法一次性完成的情况下,通常采用Java分组排序),大概思路如下: 1.在Bean中添加相关的分组标记字段,对求和或者其它统计的结果进行插入分组标记,下面demo中为bigIdOrder标记 2.对完成标记的List进行标记的补全 3.

【java对象比较器和克隆】

一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类.我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要使用到.那么String类和自定义类能不能使用Arrays.sort()来进行排序呢.下面我们来试试,如下: public class Mystring { public static void main(String[] args) { String []a={"早上","中午&

java:Comparator比较器

/*Comparator是java.util包里的一个接口,使用时应该实现导入相应的包, *再写一个实现了Comparator接口的类,并复写int compare(Object o)方法, *写出你的判断语句(例如:以下代码是按照年龄的递增顺序排序,年龄相同则按照工资的数目递增排序) *把这个类添加到Arrays.sort()或Collections.sort()中(例如:定义一个list集合,用来存放对象,可以这样写:Collections.sort(list,new 实现类():)) */

Java——类比较器

1.Product类 1 public class Product 2 { 3 private int pid; 4 private String name; 5 private double price; 6 7 public Product() 8 { 9 // TODO Auto-generated constructor stub 10 } 11 12 public Product(int pid, String name, double price) 13 { 14 this.pid

我爱java系列---【java对象比较器,用于记录修改操作时修改的具体详情】

对象比较器 public class LogUtils<T> { /** * 对象比较器 * 比较结果eg:1.字段名称loginName,旧值:liu,新值:gu;2.字段名称address,旧值:hunan,新值:neimenggu * @param oldBean * @param newBean * @return */ public String compareObject(Object oldBean, Object newBean) { String str = "&q

java: Comparable比较器,定义二叉操作类

//定义二叉操作类 class BinaryTree{ class Node{ private Node left; //左指数 private Node right; //右指数 private Comparable data; public Node(Comparable<?> data) { this.data = data; } //二叉数据比较,大的放在右边,小的放在左边 public void addNode(Node newNode) { //放在左边 if( newNode.d

JavaSE入门学习39:Java集合框架之比较器

排序的算法是我们最常用的算法,初学程序,每个人都尝试过排序.但只是局限于简单的排序. 如将下列数字进行排序 1,3,5,8,3,6 于是我们得出结果 1,3,3,5,6,8 将下列字母(字符)进行排序 a,i,e,f,w,s 于是我们得出结果 a,e,f,i,s,w 但是我们遇到的情况就不是如此简单了.如给公司里的商品进行排序,我们很轻易的想到按照商品的名称排序不 就完了,而且简单明了.但现实并如我们相信般简单.同一商品名称可以有不同的批次,进货时间,可能还会有单价 的不同.显然只根据商品名称排