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 ...
随机推荐
- authenticate的执行流程与重写
流程 1.authenticate调用的是_get_backends函数 def authenticate(request=None, **credentials): for backend, bac ...
- vs2019中调用本地数据库mdf的相关问题
程序中要用到数据库文件mdf,这个不像sql文件一样能直接用txt打开,所以很麻烦 所以mysql要比sqlserver好用,哎 要使用本地的mdf文件数据库,首先要将web.config中的网络连接 ...
- scope:provided影响子依赖
一.问题 在上一篇<SpringBoot项目启动不走内嵌容器>中发现,provided会影响子依赖. 标记为scope:provided的jar在编译和运行时有作用,表明了运行时depen ...
- xxx商城之架构和功能简述
XXX商城项目简介 XXX商城项目是一套做特卖的电商系统,包括前台商城系统(App.微信版.小程序版.H5版)及后台管理系统,基于SpringBoot+SpringDataJpa+S ...
- 使用eslint检查代码质量
1.安装 全局安装 npm install eslint -g 局部安装 npm install eslint --save 2.初始化一个配置文件 eslint --init 执行后根据项目需要回答 ...
- zookerper入门、核心概念和使用场景
zookeeper是一个分布式程序的高性能协调服务,提供集中式信息存储服务,数据存储于内存中,类似文件系统的树形结构,高吞吐量和低延时,集群高可靠,基于zookeeper可以实现分布式统一配置中心.分 ...
- cocos版本说明
一直知道cocos是做游戏的,想学习一下,结果去官网一看就懵逼了.Cocos Creator,Cocos2d-x,cocos studio,Cocos2d-js,Cocos2d-x-lua,那一种才是 ...
- js 使用 "use strict"
"use strict"是JavaScript中一个非常好的特性,而且非常容易使用. 使用方法 // file.js "use strict" function ...
- 【洛谷 P4070】 [SDOI2016]生成魔咒(后缀自动机)
题目链接 建出\(SAM\)后,不同子串个数就是\(\sum len(i)-len(fa(i))\) 因为\(SAM\)在线的,所以每加入一个字符就能直接加上其贡献,于是这道题就没了. 因为\(x\) ...
- Java电商项目,秒杀,抢购等高并发场景的具体场景和一些概念以及处理思路
这里我借鉴了网上其他大佬的观点: 一:高并发带来的挑战 原因:秒杀抢购会经常会带来每秒几万的高并发场景,为了更快的返回结果给用户. 吞吐量指标QPS(每秒处理请求数),假设一个业务请求响应耗时为100 ...