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比较的更多相关文章

  1. Java比较器对数组,集合排序一

    数组排序非常简单,有前辈们的各种排序算法,再加上Java中强大的数组辅助类Arrays与集合辅助类Collections,使得排序变得非常简单,如果说结合比较器Comparator接口和Collato ...

  2. java比较器Comparable接口和Comaprator接口

    Comparable故名思意是比较,意思就是做比较的,然后进行排序. 1.什么是comparable接口 此接口强行对实现它的每个类的对象进行整体排序.此排序被称为该类的自然排序 ,类的 compar ...

  3. 黑马----JAVA比较器:Comparable和Comparator

    黑马程序员:Java培训.Android培训.iOS培训..Net培训 一.Comparable接口 1.public interface Comparable{ public int compare ...

  4. Java中equals与==和comparaTo的区别

    一.先说说Java中equals和==的区别: Java中的数据类型,可分为两类: 1.基本数据类型(也叫原始数据类型) 八大基本数据类型 char byte short int long doubl ...

  5. java比较器Comparator 使用

    PresonDemo package cn.stat.p5.person.demo; public class PresonDemo implements Comparable { private S ...

  6. Java比较器

    导语 本节内容,比较器Comparable是核心内容. 主要内容 重新认识Arrays类 两种比较器的使用 具体内容 Arrays类 在之前一直使用的"java.util.Arrays.so ...

  7. Java 比较器

    比较器 Arrays 类 主要功能: 完成所有与数组有关的操作的工具类 二分查找: 在一个有序的数字序列中进行二分查找 public static int binarySearch(数据类型 [] a ...

  8. TreeSet的两种实现方法:Comparable和Comparator(Java比较器)

    Comparable与Comparator实际上是TreeSet集合的两种实现方式,用来实现对象的排序.下边介绍一下两种比较器的使用方法和区别. Comparable称为元素的自然顺序,或者叫做默认顺 ...

  9. 小白养成记——Java比较器Comparable和Comparator

    一.使用情景 1.  调用Arrays.sort()方法或Collections.sort()方法对自定义类的对象排序 以Arrays.sort()为例.假定有如下自定义的Person类 1 publ ...

随机推荐

  1. activiti 部署在oracle多用户下不能自动建表问题的解决!

    在activiti配置文件中的SpringProcessEngineConfiguration的配置项中添加<property name= "databaseSchema" ...

  2. 调试 JavaScript 脚本

    随着 JavaScript 应用的复杂性逐渐提高,开发者需要有力的调试工具来帮助他们快速发现问题的原因,并且能高效地修复它.Chrome DevTools 提供了一系列实用的工具使得调试 JavaSc ...

  3. 【转】aiohttp 源码解析之 request 的处理过程

    [转自 太阳尚远的博客:http://blog.yeqianfeng.me/2016/04/01/python-yield-expression/] 使用过 python 的 aiohttp 第三方库 ...

  4. python列表推导和字典推导

    代码如下: list = ['aaa','bbb','ccc','ddd'] dict = {key:value for value,key in enumerate(list)} print(dic ...

  5. glusterFS的缓存测试

    众所周知,glusterFS在客户端有缓存,缓存目的在于提高读性能.那么多个客户端同时对文件进行读写,会不会存在client缓存与server文件不一致的情况?比如client A和client B读 ...

  6. poj3624 简单的01背包问题

    问题描述: 总共有N种宝石供挑选,宝石i的重量为Wi,吸引力为Di,只可以用一次.Bessie最多可负担的宝石手镯总重量为M.给出N,M,Wi,Di,求M. 非常标准的01背包问题.使用了优化的一维数 ...

  7. Opencv2.4.4作图像旋转和缩放

    关于下面两个主要函数的讲解: cv::getRotationMatrix2D(center, angle, scale); cv::warpAffine(image, rotateImg, rotat ...

  8. RPATH与RUNPATH

    RPATH与RUNPATH 时间 2011-11-01 21:46:44 Qt Labs China 原文  http://labs.qt.nokia.com.cn/2011/11/01/rpath- ...

  9. Java琐碎知识点

    jps命令是JDK1.5提供的一条显示当前用户的所有java进程pid的指令,类似Linux上的ps命令简化版,Windows和linux/unix平台都可以用比较常用的参数:-q:只显示pid,不显 ...

  10. Unity 之 AfterFixedUpdate,在所有 GameObject FixedUpdate 后执行

    目的 FixedUpdate 在不同的 GameObject 互相之间是没有执行顺序的,我们并不能知道哪个 GameObject 先执行 FixedUpdate. 但是,有的时候我们仍然希望某个 Ga ...