java基础---关于比较器Comparator和Comparable
生活随笔
收集整理的這篇文章主要介紹了
java基础---关于比较器Comparator和Comparable
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
?
package com.henu.jihe;import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Set; import java.util.TreeSet;public class Demo03_比較器 {public static void main(String[] args) {Book b1 = new Book("AI時代我們應(yīng)該做些什么",109,"清華大學(xué)出版社","李孟冬");Book b2 = new Book("AI會毀滅人類嗎?",99,"河南大學(xué)出版社","李孟冬");Book b3 = new Book("AI來臨前的人性思考",79,"人民出版社","李孟冬");Book b4 = new Book("這本就是一首愛你的詩",59,"清華大學(xué)出版社","李孟冬");Book b5 = new Book("java的大發(fā)展",80,"清華大學(xué)出版社","李孟冬");Set<Book> ts = new TreeSet<Book>();ts.add(b1);ts.add(b2);ts.add(b3);ts.add(b4);ts.add(b5);for (Book book : ts) {System.out.println(book.toString());}} }class Book implements Comparable<Book>{private String name;private int price;private String press;//出版社private String author;public Book() {}public Book(String name, int price, String press, String author) {this.name = name;this.price = price;this.press = press;this.author = author;}@Overridepublic String toString() {return "Book [name=" + name + ", price=" + price + ", press=" + press + ", author=" + author + "]";}@Overridepublic int compareTo(Book o) {return this.price - o.price;}}?
package com.henu.jihe;import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Demo03_01 {public static void main(String[] args) {Book2 b1 = new Book2("AI時代我們應(yīng)該做些什么",109,"清華大學(xué)出版社","李孟冬");Book2 b2 = new Book2("AI會毀滅人類嗎?",99,"河南大學(xué)出版社","李孟冬");Book2 b3 = new Book2("AI來臨前的人性思考",79,"人民出版社","李孟冬");Book2 b4 = new Book2("這本就是一首愛你的詩",59,"清華大學(xué)出版社","李孟冬");Book2 b5 = new Book2("java的大發(fā)展",80,"清華大學(xué)出版社","李孟冬");List<Book2> list = new ArrayList<Book2>();list.add(b1);list.add(b2);list.add(b3);list.add(b4);list.add(b5);Collections.sort(list, new MyComparator());for (Book2 book : list) {System.out.println(book.toString());}} } class MyComparator implements Comparator<Book2>{@Overridepublic int compare(Book2 o1, Book2 o2) {return o1.getPrice() - o2.getPrice();} } class Book2{private String name;private int price;private String press;//出版社private String author;public Book2() {}public Book2(String name, int price, String press, String author) {this.name = name;this.price = price;this.press = press;this.author = author;}@Overridepublic String toString() {return "Book [name=" + name + ", price=" + price + ", press=" + press + ", author=" + author + "]";}public String getName() {return name;}public int getPrice() {return price;}public String getPress() {return press;}public String getAuthor() {return author;}}?
package com.henu.jihe;import java.util.TreeSet;/** 4.設(shè)計一個程序,使用TreeSet集合存儲Student類對象, * Student類包含name、age、score三個屬性,(10) * 要求設(shè)計一個測試類,完成 * 增加學(xué)生 * 排序行為:對姓名進(jìn)行升序排序,如果姓名一樣,對年齡進(jìn)行降序排序,如果年齡一樣,對成績進(jìn)行升序排序。 * 【注】如果把一個對象添加到TreeSet集合,\ * 則該對象必須實現(xiàn)Comparable接口,否則程序會拋出ClassCastException異常。*/ public class Demo03_02 {public static void main(String[] args) {TreeSet<Student2> ts = new TreeSet<>();ts.add(new Student2("LMD",18,16));ts.add(new Student2("AZS",16,98));ts.add(new Student2("AZS",20,36));ts.add(new Student2("AZS",20,80));ts.add(new Student2("WWW",16,100));for (Student2 o : ts){System.out.println(o.toString());}} }class Student2 implements Comparable<Student2>{private String name;private int age;private int score;public Student2() {}public Student2(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}public String getName() {return name;}public int getAge() {return age;}public int getScore() {return score;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";}@Override//對姓名進(jìn)行升序排序,如果姓名一樣,對年齡進(jìn)行降序排序,如果年齡一樣,對成績進(jìn)行升序排序。public int compareTo(Student2 o) {if (this.getName().compareTo(o.getName()) == 0) {if (this.getAge() == o.getAge()) {return this.getScore() - o.getScore();}return o.getAge() - this.getAge();}return this.getName().compareTo(o.getName());} }?
package com.henu.jihe;import java.util.Comparator; import java.util.TreeSet;public class Demo03_04 {public static void main(String[] args) {TreeSet<Student4> ts = new TreeSet<>(new MyComparator3());ts.add(new Student4("LMD",18,16));ts.add(new Student4("AZS",16,98));ts.add(new Student4("AZS",20,36));ts.add(new Student4("AZS",20,80));ts.add(new Student4("WWW",16,100));for (Student4 o : ts){System.out.println(o.toString());}} }class MyComparator3 implements Comparator<Student4>{@Overridepublic int compare(Student4 o1, Student4 o2) {if (o1.getName().compareTo(o2.getName()) == 0) {if (o1.getAge() == o2.getAge()) {return o1.getScore() - o2.getScore();}return o1.getAge() - o1.getAge();}return o1.getName().compareTo(o2.getName());}}class Student4{private String name;private int age;private int score;public Student4() {}public Student4(String name, int age, int score) {this.name = name;this.age = age;this.score = score;}public String getName() {return name;}public int getAge() {return age;}public int getScore() {return score;}@Overridepublic String toString() {return "Student [name=" + name + ", age=" + age + ", score=" + score + "]";} }?如果你又興趣,你也可以試試,兩個方法的輸出值不一樣,第二種去掉了名字重復(fù)的值
?
?
而更加有趣的一個地方在于自平衡二叉樹,其實還是數(shù)據(jù)結(jié)構(gòu)不好的問題。。。
package com.henu.jihe;import java.util.Comparator; import java.util.HashSet; import java.util.Set; import java.util.TreeSet;public class Demo03_測試 {public static void main(String[] args) {Dog dog1 = new Dog("lib",1);Dog dog2 = new Dog("asd",2);Dog dog3 = new Dog("eer",3);Dog dog4 = new Dog("tom",4);Dog dog5 = new Dog("lib",1);Set<Dog> hSet = new TreeSet<>(new comparatorDog());hSet.add(dog1);hSet.add(dog2);hSet.add(dog3);hSet.add(dog4);hSet.add(dog5);for (Dog dog : hSet) {System.out.println(dog);}} }class comparatorDog implements Comparator<Dog>{@Overridepublic int compare(Dog o1, Dog o2) {if (o1.getId() == o2.getId()) {return 0;}else{return 1;}// return o1.getId() - o2.getId(); // return o1.getName().compareTo(o2.getName());}}class Dog{private String name;private int id;public Dog() {super();// TODO Auto-generated constructor stub}public Dog(String name, int id) {super();this.name = name;this.id = id;}public int getId() {return id;}public String getName() {return name;}@Overridepublic String toString() {return "Dog [name=" + name + ", id=" + id + "]";}}?
?
?
總結(jié)
以上是生活随笔為你收集整理的java基础---关于比较器Comparator和Comparable的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java小编程----括号是否匹配
- 下一篇: java基础--集合案例斗地主发牌排序