题目:
封装一个人类,属性姓名,收入,年龄,书,
封装一个书类:属性书名,价格
存储TreeSet<Person>集合,排序规则:
A:先按照收入排序:从高到低
B:收入相等的情况下,按照年龄排序:从小大大
C:如果收入和年龄都相等,按照姓名排序,字典顺序(String 类的
compareTo 方法)
D:如果以上3 个属性都相等,按照书排序,先按照书价格:从低到高,
如果书价格相等,按照书名(字典顺序)。
4、利用自定义比较器完成上题。(使用匿名内部类)
第一种
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class CrossGift {
public static void main(String[] args) {
Person p1=new Person(\"lisi\", 122, 25, \"javase1\", 12); //创建对象
Person p2=new Person(\"zhangsna\", 122, 23, \"javase1\", 12);
Person p3=new Person(\"lisi\", 122, 23, \"javase2\", 12);
Person p4=new Person(\"lisi\", 122, 23, \"javase1\", 12);
Person p5=new Person(\"lisi\", 122, 23, \"javase2\", 15);
Person p6=new Person(\"lisi\", 123, 22, \"javase3\", 13);
TreeSet<Person> ts = new TreeSet<>(new Comparator<Person>() {//创建TreeSet同时匿名内部类传入比较器
@Override
public int compare(Person p1, Person p2) {//比较,可调整 p1比p2还是p2比p1改变排序方式.
return (p2.sal - p1.sal != 0 ? p2.sal - p1.sal
: p1.age - p2.age != 0 ? p1.age - p2.age
: p1.name.compareTo(p2.name) != 0 ? p1.name.compareTo(p2.name)
: p1.book.price - p2.book.price != 0 ? p1.book.price - p2.book.price
: p1.book.name.compareTo(p2.book.name)!=0? p1.book.name.compareTo(p2.book.name):1 );
}
}); //开存
ts.add(p1);
ts.add(p2);
ts.add(p3);
ts.add(p4);
ts.add(p5);
ts.add(p6);
ts.add(p1);
Iterator<Person> it=ts.iterator();//用迭代器取出,看排序
while (it.hasNext())
System.out.println(it.next().toString());
}
}
class Person {
String name;
int sal;
int age;
Book book;
public Person(String name,int sal,int age,String bookname,int bookprice) {
this.name=name;
this.sal=sal;
this.age=age;
this.book=new Book(bookname,bookprice);
}
public String toString(){//覆盖 的toString()方法用于查看输出/
return(\"name:\"+name+\"\\tsal:\"+sal+\"\\tage:\"+age+\"\\tbookname:\"+book.name+\"\\tbookprice:\"+book.price);
}
}
class Book {
String name;
int price;
public Book(String name, int price) {
this.name = name;
this.price = price;
}
}
第二种
删除了比较时全部相等时返回1导致Treeset无法区分比较后完全相同的情况.Person类设了一个flag用于标记变量名;注释增加换行
import java.util.Comparator;
import java.util.Iterator;
import java.util.TreeSet;
public class CrossGift {
public static void main(String[] args) {
Person p1=new Person(\"p1\",\"lisi\", 122, 25, \"javase1\", 12); //创建对象
Person p2=new Person(\"p2\",\"zhangsna\", 122, 23, \"javase1\", 12);
Person p3=new Person(\"p3\",\"lisi\", 122, 23, \"javase2\", 12);
Person p4=new Person(\"p4\",\"lisi\", 122, 23, \"javase1\", 12);
Person p5=new Person(\"p5\",\"lisi\", 122, 23, \"javase2\", 15);
Person p6=new Person(\"p6\",\"lisi\", 123, 22, \"javase3\", 13);
//创建TreeSet同时匿名内部类传入比较器
TreeSet<Person> ts = new TreeSet<>(new Comparator<Person>() {
//比较,可调整 p1比p2还是p2比p1改变排序方式.
@Override
public int compare(Person p1, Person p2) {
return (p2.sal - p1.sal != 0 ? p2.sal - p1.sal
: p1.age - p2.age != 0 ? p1.age - p2.age
: p1.name.compareTo(p2.name) != 0 ? p1.name.compareTo(p2.name)
: p1.book.price - p2.book.price != 0 ? p1.book.price - p2.book.price
: p1.book.name.compareTo(p2.book.name) );
}
}); //开存
ts.add(p1);
ts.add(p2);
ts.add(p3);
ts.add(p4);
ts.add(p5);
ts.add(p6);
Iterator<Person> it=ts.iterator();//用迭代器取出,看排序
while (it.hasNext())
System.out.println(it.next().toString());
}
}
class Person {
String flag;//做了个标记用于标记变量名字,以观察排序效果;
String name;
int sal;
int age;
Book book;
public Person(String flag,String name,int sal,int age,String bookname,int bookprice) {
this.flag=flag;
this.name=name;
this.sal=sal;
this.age=age;
this.book=new Book(bookname,bookprice);
}
public String toString(){//覆盖 的toString()方法用于查看输出/
return(this.flag+\":\\tname:\"+name+\"\\tsal:\"+sal+\"\\tage:\"+age+\"\\tbookname:\"+
book.name+\"\\tbookprice:\"+book.price);
}
}
class Book {
String name;
int price;
public Book(String name, int price) {
this.name = name;
this.price = price;
}
}
其他题目:
编写一个商品类(商品id 商品价格double 上架时间Date 商品名称String)
放在TreeSet中,使用匿名内部内实现比较器的排序,排序的优先级(id,价格,时间,名称)
继续阅读与本文标签相同的文章
上一篇 :
日本京都大学新研究:AI读取脑波,重建人类思维
下一篇 :
硅谷返乡大潮,AI海归大调查:薪酬、发展、故乡情
-
二维码如此普及,为何三维码没办法普及
2026-05-19栏目: 教程
-
山东有效专利量前十企业和前十大专院校名单来啦,第一名你想到了吗
2026-05-19栏目: 教程
-
两种ASO应用优化的核心操作方法
2026-05-19栏目: 教程
-
第126届广交会15日开幕,新产品新技术受青睐
2026-05-19栏目: 教程
-
多位知名专家建言 宁波打造中国隐形冠军之城
2026-05-19栏目: 教程
