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. 【Android类型SDK测试(二)】环境基础

    (一)语言 Android使用的Java语言,所以要测试Android类型的SDK,Java的基础知识还是需要的. 另外,Android中有NDK类型的编程,需要知道C相关的知识. (二)环境准备 A ...

  2. python 源代码分析之调试设置

    首先在官方下载源代码,我下载的是最新版本3.4.3版本:https://www.python.org/ftp/python/3.4.3/Python-3.4.3.tgz 解压后的目录如下(借用网上的目 ...

  3. Git学习03 --远程仓库

    把本地库的内容推送到远程(github), 用git push命令,实际上是把当前分支master推送到远程. 由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的 ...

  4. D、GO、Rust 谁会在未来取代 C?为什么?——Go语言的定位非常好,Rust语言非常优秀,D语言也不错

    不要管我的地位和 D 语言创造者之一的身份.我会坦诚的回答这个问题.我熟悉 Go 和 Rust,并且知道 D 的缺点在哪里.我鼓励人们在 Rust 和 Go 社区相似身份的人,也可以提出他们诚恳的观点 ...

  5. Dictionary到List转换中的性能问题 转

    本文来自:http://www.cnblogs.com/353373440qq/p/3488367.html 在应用泛型中,我们经常使用Dictionary,经常会用到Dictionary到List的 ...

  6. windows平台HTTP代理server搭建(CCproxy)

    HTTP代理(CCproxy) 一.拓扑图 二.CCproxy的安装和配置 1.安装CCproxy (1)下载CCproxy无线破解版(没破解的都仅仅支持最多三个用户同一时候连接). (2)按说明安装 ...

  7. Framework7功能齐全的 iOS7 App 前端框架

    Framework7 是一个功能很全的 HTML 框架,用来构建 iOS7 应用程序. Framework7 允许您灵活搭建列表视图(表视图) .你可以让他们作为导航菜单,你可以在列表里面使用图标,输 ...

  8. virtual private catalog

    The following databases are registered in the base recovery catalog: PROD1, PROD2, and PROD3.The dat ...

  9. 【贪心】【TOJ4107】【A simple problem】

    Given three integers n(1≤n≤1018), m(1≤m≤105), k(1≤k≤1018). you should find a list of integer A1,A2,- ...

  10. Java基础笔记-异常总结,包

    异常:是对问题的描述,将问题进行对象封装, 异常的体系: Throwable: 1.Error 2.Exception 1.RuntimeException 异常体系的特点: 异常体系中的所有类以及建 ...