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. Putty使用公钥认证时,报错:Disconnected: No supported authentication methods available(server sent:public key) 问题的解决

    Putty使用公钥认证时,按照常规方法设置,一直报错:Disconnected: No supported authentication methods available (server sent: ...

  2. oracle 之 COMMENT

    http://blog.csdn.net/liguihan88/article/details/3002403 无疑注释现在都被大家接受和认可,在大家编程用的IDE中都提供或有第三方插件来支持提取注释 ...

  3. Canvas的补充

    一.Canvas.save()作用:让后续的操作就好像在一个新图层上. 二.Canvas.restore():让之前save()产生的图层全部合并. 三.Canvas.translate():将原点( ...

  4. PHP学习笔记,自己动手写个MVC的框架 -- base所有代码

    <?php /** 名称:基础类 作用:引用参数处理类,加载基础配置, 作者:swordphp@126.com 创建日期:2013-07-31 **/ require_once(ROOT_PAT ...

  5. SQL Server 中索引的禁用与删除

    主题 1. 禁用索引 alter index index_name on table_name disable; 主题 2. 删除索引 drop index table_name.index_name ...

  6. SSAS-时间维度的标准设计

    1.首先要构建一个时间维度表,下面给出通用的构建时间维度的存储过程: USE [BI_DW] GO /****** Object: StoredProcedure [dbo].[proc_Dim_da ...

  7. USB device & USB controller & USB passthrough

    目录 USB device USB controller Linux 相关命令 Python 相关库 Libvirt USB passthrough 参考资料 近期往 openstack 里倒腾 US ...

  8. STL set 使用小结

    这是微软帮助文档中对集合(set)的解释: “描述了一个控制变长元素序列的对象(注:set中的key和value是Key类型的,而map中的key和value是一个pair结构中的两个分 量)的模板类 ...

  9. poj 1907 Work Reduction_贪心

    题意:公司要你要完成N份任务,但是你是不可能全部完成的,所以需要雇佣别人来做,做到剩下M份时,自己再亲自出马.现在有个机构,有两种付费方式,第一种是每付A元帮你完成1份,第二种是每付B元帮你完成剩下任 ...

  10. 深信服笔试题(网络project师售后)

    总共同拥有3到大题, 1选择 主要有ip地址计算.http协议.vrrp协议. 2.主要是linux填空题 a.linux显示全部系统载入模块____ b.写出linux的两个开机启动程序___.__ ...