java comparable comparator 比较器的使用 及 自定义比较器
来源:互联网 发布:淘宝一键删除宝贝 编辑:程序博客网 时间:2024/06/12 00:45
1. 原始类
/**
* 将对象作为TreeMap的key,此时需要给对象类需要具备比较功能、需要实现Comparable接口
* @author bruce
* 此类对象主要是用要用于TreeMap的key
*/
public class Student implements Comparable<Student> {
private int age;
private String name;
public Student(String name, int age) {
this.age = age;
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 先按age比较,如果age相等比较name
*/
@Override
public int compareTo(Student o) {
int res = this.age - o.age;
return res == 0 ? this.name.compareTo(o.name) : res ;
}
}
2. 自定义比较器
import java.util.Comparator;
public class MyComparator implements Comparator<Student> {
@Override
public int compare(Student o1, Student o2) {
int res = o1.getName().compareTo(o2.getName());
return res == 0 ? o1.getAge() - o2.getAge() : res;
}
}
3. demo
import java.util.Comparator;
import java.util.Iterator;
import java.util.Set;
import java.util.TreeMap;
import org.junit.Test;
/**
* 将对象作为TreeMap的key,此时需要给对象类需要具备比较功能、需要实现Comparable接口
* @author bruce
*
*/
public class TreeMapDemo {
/**
* 按照Student中定义的默认比较方法<先比较年龄,如果年龄相等比较姓名>进行比较
*/
// @Test
public void defaultComparable(){
TreeMap<Student, String> map = new TreeMap<Student, String>();
map.put(new Student("xiaosan", 23), "上海");
map.put(new Student("xiaosi", 27), "北京");
map.put(new Student("xiaosan", 25), "上海");
map.put(new Student("xiaowu", 26), "深圳");
Set<Student> set = map.keySet();
Iterator<Student> iterator = set.iterator();
while(iterator.hasNext()){
Student student= iterator.next();
System.out.println(" key = " + student + " value = " + map.get(student));
}
}
/**
* 使用比较器,先比较姓名、如果姓名相等比较年龄
*/
@Test
public void createComparable(){
TreeMap<Student, String> map = new TreeMap<>(new Comparator<Student>() {
@Override
public int compare(Student o1, Student o2) {
//先按照姓名比较
int res = o1.getName().compareTo(o2.getName());
return res == 0 ? o1.getAge() - o2.getAge() : res;
}
});
map.put(new Student("5", 26), "上海");
map.put(new Student("1", 26), "北京");
map.put(new Student("3", 26), "上海");
map.put(new Student("4", 26), "深圳");
Iterator<Student> iterator = map.keySet().iterator();
while(iterator.hasNext()){
Student student = iterator.next();
System.out.println(" key = " + student + " value = " + map.get(student));
}
}
}
- java comparable comparator 比较器的使用 及 自定义比较器
- Java比较器(Comparable、Comparator)
- Java-比较器(Comparable、Comparator)
- java比较器Comparable和Comparator的使用
- Comparable、Comparator比较器
- 浅谈Java比较器comparable/comparator
- java比较器Comparator与Comparable
- Java比较器-Comparable和Comparator
- java中的Comparator和Comparable比较器的用法
- Java中常用的比较器Comparable与Comparator
- 比较器comparable和comparator的区别
- 比较器 comparable vs comparator
- comparator与Comparable比较器
- 比较器Comparable和Comparator
- 比较器:Comparable和Comparator
- java比较器Comparable接口和Comparator接口的区别及应用
- java comparator和comparable两种比较器比较
- Java自定义比较器Comparator
- Swordfish
- 给PHPthinking一个机会
- 自定义控件之-----progressBar
- 面试时候遇到的坑。
- Java编程思想:第一章 对象导论
- java comparable comparator 比较器的使用 及 自定义比较器
- C++琐记
- Jenkins设置允许用户注册
- Odoo 日志配置、使用及实现
- Android开发之多级下拉列表菜单实现(仿美团,淘宝等)
- 数据结构中随机数的算法
- ubuntu10.10下安装CLAPACK库
- 优秀程序员因何而优秀?
- 快速设置ADB工作目录