TreeSet----定制器排序

本文介绍了一个使用Java实现的复杂排序案例,通过自定义比较器对包含年龄、姓名、书籍名称和价格的对象集合进行多层次排序。首先按年龄升序排列,年龄相同则按姓名字典序排序,姓名相同再按书籍价格降序,最后按书籍名称字典序确定顺序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package homework;
//要求:1.按照年龄,从小到大排序,2.如果年龄相等,按照姓名字典顺序,		
////3.如果姓名也一致,按照书的价格共高到低。
////4.价格一致,按照书名,5.书名也一致,认为是同一对象,不存储
import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;
import java.util.TreeSet;

public class Test2 {
 public static void main(String[] args) {
	TreeSet<Person2> set = new TreeSet<Person2>(new Comparator<Person2>() { //匿名类写法

		@Override
		public int compare(Person2 o1, Person2 o2) {
		  if(o1.age>o2.age){
			  return 1;
		  }else if(o2.age>o1.age){
			  return -1;
		  }else{
			  CollationKey key = Collator.getInstance().getCollationKey(o1.name);
			  CollationKey key2 = Collator.getInstance().getCollationKey(o2.name);
			  if(key.compareTo(key2)>0){
				  return 1;
			  }else if(key2.compareTo(key)>0){
				  return -1;
			  }
			  else{
				  if(o1.bookprice>o2.bookprice){
					  return -1;
				  }else if(o2.bookprice>o1.bookprice){
					  return 1;
				  }
				  else{
					  CollationKey key3 = Collator.getInstance().getCollationKey(o1.bookname);
					  CollationKey key4 = Collator.getInstance().getCollationKey(o2.bookname);
				      return key3.compareTo(key4);
				  }
			  }
		  }
		}
	});
	set.add(new Person2(1, "刘鑫玉", "java入门指南", 30));
	set.add(new Person2(3, "刘海洋", "hh入门指南", 20));
	set.add(new Person2(6, "蒋海涛", "ui入门指南", 50));
	set.add(new Person2(8, "杨智", "c入门指南", 10));
	set.add(new Person2(3, "刘晓红", "android入门指南", 10));
	
	//System.out.println(set);
	for (Person2 person2 : set) {
		System.out.println(person2);
	}
}
}

package homework;

public class Person2 {
	int age;
	String name;
	String bookname;
	int bookprice;
	public Person2(int age, String name, String bookname, int bookprice) {
		super();
		this.age = age;
		this.name = name;
		this.bookname = bookname;
		this.bookprice = bookprice;
	}
	@Override
	public String toString() {
		return "Person2 [age=" + age + ", bookname=" + bookname
				+ ", bookprice=" + bookprice + ", name=" + name + "]";
	}
	
}

 ************************************************************************************************************************************************************************************

 ************************************************************************************************************************************************************************************

实现类 实现 接口 写法

package homework;

import java.util.TreeSet;

public class Test3 {
public static void main(String[] args) {
	TreeSet<Person3>set = new TreeSet<Person3>(new Person3imp());
	set.add(new Person3(1, "刘鑫玉", "java入门指南", 30));
	set.add(new Person3(3, "刘海洋", "h5入门指南", 20));
	set.add(new Person3(6, "蒋海涛", "ui入门指南", 50));
	set.add(new Person3(8, "杨智", "c入门指南", 10));
	set.add(new Person3(3, "刘晓红", "android入门指南", 10));
	
	//System.out.println(set);
	for (Person3 person3 : set) {
		System.out.println(person3);
	}
}
}

package homework;

import java.text.CollationKey;
import java.text.Collator;
import java.util.Comparator;

public class Person3imp implements Comparator<Person3>{

	@Override
	public int compare(Person3 o1, Person3 o2) {
		 if(o1.age>o2.age){
			  return 1;
		  }else if(o2.age>o1.age){
			  return -1;
		  }else{
			  CollationKey key = Collator.getInstance().getCollationKey(o1.name);
			  CollationKey key2 = Collator.getInstance().getCollationKey(o2.name);
			  if(key.compareTo(key2)>0){
				  return 1;
			  }else if(key2.compareTo(key)>0){
				  return -1;
			  }
			  else{
				  if(o1.bookprice>o2.bookprice){
					  return -1;
				  }else if(o2.bookprice>o1.bookprice){
					  return 1;
				  }
				  else{
					  CollationKey key3 = Collator.getInstance().getCollationKey(o1.bookname);
					  CollationKey key4 = Collator.getInstance().getCollationKey(o2.bookname);
				      return key3.compareTo(key4);
				  }
			  }
		  }
		}
	}



package homework;

public class Person3 {
	int age;
	String name;
	String bookname;
	int bookprice;
	public Person3(int age, String name, String bookname, int bookprice) {
		super();
		this.age = age;
		this.name = name;
		this.bookname = bookname;
		this.bookprice = bookprice;
	}
	@Override
	public String toString() {
		return "Person2 [age=" + age + ", bookname=" + bookname
				+ ", bookprice=" + bookprice + ", name=" + name + "]";
	}
	
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值