java比较器 之compareable 和comparato比较
compareable
测试类
import java.util.Set;
import java.util.TreeSet; public class Test { public static void main(String[] args) {
Set<Person>allset = new TreeSet<Person>();
allset.add(new Person(22,"hjw",20000.0,"论语",50.0));
allset.add(new Person(22,"fyy",7000.0,"大学",40.0));
allset.add(new Person(22,"hjl",6000.0,"孟子",30.0));
allset.add(new Person(22,"hlq",10000.0,"中庸",20.0));
allset.add(new Person(24, "hsx", 20000.0,"诗经", 40.0));
allset.add(new Person(22,"cl",20000.0,"离骚",10.0));
allset.add(new Person(22,"zsk",20000.0,"墨子",25.0));
allset.add(new Person(22,"hjw",20000.0,"论语",23.0));
allset.add(new Person(22,"hjw",20000.0,"论语",22.0));
System.out.println(allset);
} }
person类
public class Person extends Book implements Comparable<Person> {
private Integer age;
private String name;
private Double salary;
//private String book;
public Integer getAge() {
return age;
}
public Person(Integer age, String name, Double salary,String bookname, double price) {
super(bookname, price);
this.age = age;
this.name = name;
this.salary = salary;
//this.book = book;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
@Override
public int compareTo(Person o) { if (this.salary>o.salary) {
return -1;
}
else if(this.salary<o.salary){
return 1;
}
else
{
if (this.age>o.age){
return 1;
}else if(this.age<o.age){
return -1;
}else{
if (this.name!=o.name) {
return this.name.compareTo(o.name);
}else {
if(this.price>o.price){
return 1;
}else if(this.price<o.price){
return -1;
}else {
return this.bookname.compareTo(o.bookname);
}
}
}
}
}
@Override
public String toString() {
return "Person [age=" + age + ", name=" + name + ", salary=" + salary + ", bookname=" + bookname + ", price="
+ price + "]";
} }
Book类
public class Book {
public String bookname;
public Double price; public Book(String bookname, double price) { this.bookname = bookname;
this.price = price;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [bookname=" + bookname + ", price=" + price + "]";
} }
自定义比较器Comparator类
Book类
public class Book {
public String bookname;
public Double price;
public Book(){}
public Book(String bookname, double price) { this.bookname = bookname;
this.price = price;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [bookname=" + bookname + ", price=" + price + "]";
} }
Person类
public class Person {
private Integer age;
private String name;
private double salary;
private Book book;
public Person(Integer age, String name, double salary,String bookname, double price) { this.age = age;
this.name = name;
this.salary = salary;
this.book=new Book(bookname,price); }
public Integer getAge() {return age;}
public void setAge(Integer age) {
this.age = age;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
} @Override
public String toString() {
return "Person [age=" + age + ", name=" + name + ", salary=" + salary + ", book=" + book + "]";
} }
自定义Comparator类
import java.util.Comparator; public class SalaryCom implements Comparator<Person>{ @Override
public int compare(Person o1, Person o2) {
if(o1.getSalary()!=o2.getSalary()){
return (int) -(o1.getSalary()-o2.getSalary());
}else if(o1.getAge()!=o2.getAge()){
return (int) (o1.getAge()-o2.getAge());
}else if(o1.getName()!=o2.getName()){
return o1.getName().compareTo(o2.getName());}
else{
if(o1.getBook().price!=o2.getBook().price){
return (int) (o1.getBook().price-o2.getBook().price);
}else{
return o1.getBook().bookname.compareTo(o2.getBook().bookname);
} }
}
}
Test类
import java.util.Set;
import java.util.TreeSet;
public class Test { public static void main(String[] args) {
SalaryCom s =new SalaryCom();
Set<Person> allset = new TreeSet<Person>(s); allset.add(new Person(22,"hjw",20000,"论语",50.0));
allset.add(new Person(22,"fyy",7000,"大学",40.0));
allset.add(new Person(22,"hjl",6000,"孟子",30.0));
allset.add(new Person(22,"hlq",10000,"中庸",20.0));
allset.add(new Person(24,"hsx",20000,"诗经", 40.0));
allset.add(new Person(22,"cl",20000,"离骚",10.0));
allset.add(new Person(22,"zsk",20000,"墨子",25.0));
allset.add(new Person(22,"hj",20000,"论语",50.0));
allset.add(new Person(22,"hjw",20000,"论语",22.0));
System.out.println(allset);
} }
使用匿名内部类自定义比较器Comparator
Book类
public class Book {
public String bookname;
public Double price;
public Book(){}
public Book(String bookname, double price) {
this.bookname = bookname;
this.price = price;
}
public String getBookname() {
return bookname;
}
public void setBookname(String bookname) {
this.bookname = bookname;
}
public double getPrice() {
return price;
}
public void setPrice(double price) {
this.price = price;
}
@Override
public String toString() {
return "Book [bookname=" + bookname + ", price=" + price + "]";
}
}
Person类
public class Person {
private Integer age;
private String name;
private double salary;
private Book book;
public Person(Integer age, String name, double salary,String bookname, double price) { this.age = age;
this.name = name;
this.salary = salary;
this.book=new Book(bookname,price); }
public Integer getAge() {return age;}
public void setAge(Integer age) {
this.age = age;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public void setSalary(double salary) {
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public double getSalary() {
return salary;
} @Override
public String toString() {
return "Person [age=" + age + ", name=" + name + ", salary=" + salary + ", book=" + book + "]";
} }
Test测试类
import java.util.Comparator;
import java.util.Set;
import java.util.TreeSet; import com.qianfeng.homework02.Person; public class Test { public static void main(String[] args) {
Set<Person> allset = new TreeSet<Person>(new Comparator<Person>() { @Override
public int compare(Person o1, Person o2) {
if(o1.getSalary()!=o2.getSalary()){
return (int) -(o1.getSalary()-o2.getSalary());
}else if(o1.getAge()!=o2.getAge()){
return (int) (o1.getAge()-o2.getAge());
}else if(o1.getName()!=o2.getName()){
return o1.getName().compareTo(o2.getName());}
else{
if(o1.getBook().price!=o2.getBook().price){
return (int) (o1.getBook().price-o2.getBook().price);
}else{
return o1.getBook().bookname.compareTo(o2.getBook().bookname);
} }
}
}); allset.add(new Person(22,"hjw",20000,"论语",50.0));
allset.add(new Person(22,"fyy",7000,"大学",40.0));
allset.add(new Person(22,"hjl",6000,"孟子",30.0));
allset.add(new Person(22,"hlq",10000,"中庸",20.0));
allset.add(new Person(24,"hsx",20000,"诗经", 40.0));
allset.add(new Person(22,"cl",20000,"离骚",10.0));
allset.add(new Person(22,"zsk",20000,"墨子",25.0));
allset.add(new Person(22,"hj",20000,"论语",50.0));
allset.add(new Person(22,"hjw",20000,"论语",22.0));
System.out.println(allset.size());
System.out.println(allset); } }
注意:String 字符串类的Comparator已经实现了compareTo方法,可以直接进行调用比较!
java比较器 之compareable 和comparato比较的更多相关文章
- Java比较器对数组,集合排序一
数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...
- java比较器Comparable接口和Comaprator接口
Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...
- 黑马----JAVA比较器:Comparable和Comparator
黑马程序员:Java培训.Android培训.iOS培训..Net培训 一.Comparable接口 1.public interface Comparable{ public int compare ...
- Java中equals与==和comparaTo的区别
一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...
- java比较器Comparator 使用
PresonDemo package cn.stat.p5.person.demo; public class PresonDemo implements Comparable { private S ...
- Java比较器
导语 本节内容,比较器Comparable是核心内容. 主要内容 重新认识Arrays类 两种比较器的使用 具体内容 Arrays类 在之前一直使用的"java.util.Arrays.so ...
- Java 比较器
比较器 Arrays 类 主要功能: 完成所有与数组有关的操作的工具类 二分查找: 在一个有序的数字序列中进行二分查找 public static int binarySearch(数据类型 [] a ...
- TreeSet的两种实现方法:Comparable和Comparator(Java比较器)
Comparable与Comparator实际上是TreeSet集合的两种实现方式,用来实现对象的排序.下边介绍一下两种比较器的使用方法和区别. Comparable称为元素的自然顺序,或者叫做默认顺 ...
- 小白养成记——Java比较器Comparable和Comparator
一.使用情景 1. 调用Arrays.sort()方法或Collections.sort()方法对自定义类的对象排序 以Arrays.sort()为例.假定有如下自定义的Person类 1 publ ...
随机推荐
- activiti 部署在oracle多用户下不能自动建表问题的解决!
在activiti配置文件中的SpringProcessEngineConfiguration的配置项中添加<property name= "databaseSchema" ...
- 调试 JavaScript 脚本
随着 JavaScript 应用的复杂性逐渐提高,开发者需要有力的调试工具来帮助他们快速发现问题的原因,并且能高效地修复它.Chrome DevTools 提供了一系列实用的工具使得调试 JavaSc ...
- 【转】aiohttp 源码解析之 request 的处理过程
[转自 太阳尚远的博客:http://blog.yeqianfeng.me/2016/04/01/python-yield-expression/] 使用过 python 的 aiohttp 第三方库 ...
- python列表推导和字典推导
代码如下: list = ['aaa','bbb','ccc','ddd'] dict = {key:value for value,key in enumerate(list)} print(dic ...
- glusterFS的缓存测试
众所周知,glusterFS在客户端有缓存,缓存目的在于提高读性能.那么多个客户端同时对文件进行读写,会不会存在client缓存与server文件不一致的情况?比如client A和client B读 ...
- poj3624 简单的01背包问题
问题描述: 总共有N种宝石供挑选,宝石i的重量为Wi,吸引力为Di,只可以用一次.Bessie最多可负担的宝石手镯总重量为M.给出N,M,Wi,Di,求M. 非常标准的01背包问题.使用了优化的一维数 ...
- Opencv2.4.4作图像旋转和缩放
关于下面两个主要函数的讲解: cv::getRotationMatrix2D(center, angle, scale); cv::warpAffine(image, rotateImg, rotat ...
- RPATH与RUNPATH
RPATH与RUNPATH 时间 2011-11-01 21:46:44 Qt Labs China 原文 http://labs.qt.nokia.com.cn/2011/11/01/rpath- ...
- Java琐碎知识点
jps命令是JDK1.5提供的一条显示当前用户的所有java进程pid的指令,类似Linux上的ps命令简化版,Windows和linux/unix平台都可以用比较常用的参数:-q:只显示pid,不显 ...
- Unity 之 AfterFixedUpdate,在所有 GameObject FixedUpdate 后执行
目的 FixedUpdate 在不同的 GameObject 互相之间是没有执行顺序的,我们并不能知道哪个 GameObject 先执行 FixedUpdate. 但是,有的时候我们仍然希望某个 Ga ...