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 ...
随机推荐
- 面试官问你MySQL的优化,看这篇文章就够了
作者:zhangqh segmentfault.com/a/1190000012155267 一.EXPLAIN 做MySQL优化,我们要善用 EXPLAIN 查看SQL执行计划. 下面来个简单的示例 ...
- Django-02-django的命令行工具
django-admin.py 是Django的一个用于管理任务的命令行工具,manage.py是对django-admin.py的简单包装,每一个Django Project里都会有一个mannag ...
- 对JAVA工程师绝对有用的Java学习资源清单
学习Java和其他技术的资源其实非常多,但也不是都是好的有用的,我们要取其精华去其糟粕,选择那些最好的,最适合我们的,同时也要由浅入深,先易后难.基于这样的一个标准,我在这里为大家提供一份Java的学 ...
- json转义问题
后端程序接受前台传递过来json 1正常json没有问题 比如 {"id":21,"userName":"2张天师","phon ...
- Scratch编程:漂亮的时钟(九)
“ 上节课的内容全部掌握了吗?反复练习了没有,编程最好的学习方法就是练习.练习.再练习.一定要记得多动手.多动脑筋哦~~” 01 — 游戏介绍 这节我们将绘制一个漂亮的.会走动时钟. 02 — 设计思 ...
- devextreme组装数据导出excel
$.get("", function (grid_dataSource) { var grid_config = dxConfig.grid(grid_dataSource); g ...
- DuplexChannel
[ServiceContract(Namespace = "http://xx.com", CallbackContract = typeof(Ipub_c))] public i ...
- 【阿里云开发】- 安装tomcat
Tomcat配置过程 1.下载Tomcat 官网地址:http://tomcat.apache.org/ 这里我用的是apache-tomcat-8.5.38.tar.gz 2.通过ftp工具将下载好 ...
- JavaScript常用数组操作方法,包含ES6方法
一.concat() concat() 方法用于连接两个或多个数组.该方法不会改变现有的数组,仅会返回被连接数组的一个副本. var arr1 = [1,2,3]; var arr2 = [4,5]; ...
- Jmeter学习笔记(十六)——HTTP请求之content-type
一.HTTP请求Content-Type 常见的媒体格式类型如下: text/html : HTML格式 text/plain :纯文本格式 text/xml : XML格式 image/gif :g ...