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 (person.age).compareTo(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);
}
}
}
打印:

java之比较器的更多相关文章
- Java原来如此-比较器(Comparable、Comparator)
有时候需要对Collection或者不为单一数字的Array进行比较,有两种方法,1是实现Comparable接口,2是实现Comparator接口. 1.ComParable接口 Comparabl ...
- java对象比较器和克隆
一.比较器Comparable和Comparator 上一篇博客介绍了工具类Arrays工具类 .我们可以对基本类型的数组调用Arrays.sort()函数来进行数组的排序.排序操作在日常开发中经常要 ...
- java Comparable 比较器的使用
/** * */ package com.mindreader; import java.util.Arrays; /** * @作者 Mind reader * @内容 对象数组排序——Compar ...
- 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 以 ...
- Java基础--比较器Comparator
Comparable接口和Comparator接口都是用来定义集合中的排序的,只是Comparable是在集合内部定义排序的实现,Comparator是在集合外部排序的实现. Comparable 的 ...
- Java 之 比较器( Comparator接口与 Comparable 接口)
一.定制排序:java.util.Comparator 接口 强行对某个对象 collection 进行整体排序 的比较函数.可以将 Comparator 传递给 sort 方法(如 Collecti ...
- Java的比较器Comparable与Comparator
在Java中有两个比较器:Comparable.Comparator 对于Integer.Double等等类型,可以直接对他们进行比较,因为已经实现了比较的方式,然而在平时常常会面临需要对集合进行排序 ...
- Java——类比较器
1.Product类 public class Product { private int pid; private String name; private double price; public ...
- Java自定义比较器Comparator
1.数字排序 奇数在前,偶数在后.奇数降序,偶数升序.输入:"0,1,2,3,4,5,6,7,8,9" 输出:"9,7,5,3,1,0,2,4,6,8&q ...
随机推荐
- 遇到了NameError: name ‘name’ is not defined 这样的错误。
改正:__name__ == "__main__" name的左右两边各有两条下划线,不是左右两边各有一条
- django RetrieveModelMixin 查询字段替换
mixins 中RetrieveModelMixin 获取当个实例 其中的主键pk获取,可以通过lookup_field 如:要换成用username字段进行查询 注:替换的字段要有唯一约束 look ...
- PAT(B) 1035 插入与归并(Java)
题目链接:1035 插入与归并 (25 point(s)) 参考博客:PAT乙级--1035(插入排序和归并)java实现熊仙森 题目描述 根据维基百科的定义: 插入排序是迭代算法,逐一获得输入数据, ...
- 企业级容器管理平台 Rancher 介绍入门及如何备份数据
企业级容器管理平台 Rancher 介绍入门及如何备份数据 是什么 Rancher 是一个为 DevOps 团队提供的完整的 Kubernetes 与容器管理解决方案的开源的企业级容器管理平台.它解决 ...
- 基于CentOS6.5的Dubbo及Zookeeper配置
基于CentOS的Dubbo及Zookeeper配置 需要提前准备好的资料: 1.首先配置java环境 步骤: 将jdk的包上传至centos服务器的/opt目录下,并且解压 tar -zxvf jd ...
- Oracle——无法在查询中执行 DML 操作
今天在调用Oracle Function遇到一个异常
- Computational biological hypothesis generation using "-omics" data
Computational biological hypothesis generation using "-omics" data Forming biological hypo ...
- Ruby开发小记
基础点 1.log打印 puts "Hello!" 2.拼接字符 value1 = "today" value2 = "#{value1} is Th ...
- python day7: time,datetime,sys,pickle,json模块
目录 python day 7 1. time模块 2. datetime模块 2.1 date类 2.2 time类 2.3 datetime类 2.4 timedelta类 2.5 tzinfo时 ...
- SAP官网发布的react教程
大家学习React的时候,用的是什么教程呢?Jerry当时用的阮一峰博客上的入门教程,因为React使用的JSX语法并不是所有的浏览器都支持,所以还得使用browser.js在浏览器端将JSX转换成J ...