import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet; /* [1] 创建书籍类,要求具备两个属性(书名+价格), 正确编写其 get、set方法,构造方法,重写 toString方法 [2] 书籍类,要求其实现 Comparable接口,并按照要求实现其 compareTo方法 (比较规则:先按照价格进行比较,从高到低进行排序,如果价格一样,再按书名进行比较(不考虑中文)) [3] 创建合适的 Set对象,并按照要求的将书籍对象存放到 Set对象中,并要求采用泛型约定 Set集合存储的类型 [4] 正确采用泛型迭代器遍历 Set集合,并要求输出结果顺序正确 */ public class Demo01 { public static void main(String[] args) { //创建泛型为 Book的 TreeSet集合并传递比较器,重写 compare方法 TreeSet<Book> set = new TreeSet<>(new Comparator<Book>() {//匿名内部类写法 @Override public int compare(Book o1, Book o2) {//o1和 o2分别为比较的两本书 //i为两本书的价格差 int i = (int) (o2.getPrice()-o1.getPrice()); if(i != 0){//价格不等时按照价格排序 return i; }else {//价格相等时按照书名自然排序 return o1.getName().compareTo(o2.getName()); } } }); //set调用 add() 添加书籍(书名,价格) set.add(new Book("西游记",65.9)); set.add(new Book("水浒传",46.9)); set.add(new Book("三国演义",69.9)); set.add(new Book("红楼梦",39.9)); set.add(new Book("Java从入门到精通",69.9)); //使用 set 调用 iterator()创建泛型为 Book的 Iterator迭代器,名为 it Iterator<Book> it = set.iterator(); //使用 while循环打印 while (it.hasNext()){//it.hasNext()表示有下一个元素存在,it.next()表示下一个元素 System.out.println(it.next());//打印下一个元素 } } } class Book {//书籍类 private String name;//书名 private double price;//价格 public Book() {//无参构造 } public Book(String name, double price) {//有参构造 this.name = name; this.price = price; } public String getName() {//获取书名 return name; } public void setName(String name) {//书名赋值 this.name = name; } public double getPrice() {//获取价格 return price; } public void setPrice(double price) {//价格赋值 this.price = price; } @Override public String toString() {//重写 toString方法,修改打印格式 return "User{" + "name='" + name + '\'' + ", price=" + price + '}'; } }
打印结果为:
User{name='Java从入门到精通', price=69.9}
User{name='三国演义', price=69.9}
User{name='西游记', price=65.9}
User{name='水浒传', price=46.9}
User{name='红楼梦', price=39.9}