A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ouyzm 中级黑马   /  2016-10-10 23:47  /  1051 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

编写一个Student类: 里面有 String name , int age 两个属性,  
   TreeSet 保存5 个 学生对象,
    要求:  1:* a.自然顺序(Comparable) 实现 按照年龄 从大到小 排列
           2:.比较器顺序(Comparator)  实现  按照  名字的长度 排列(可以重复,不考虑年龄)
           3: 验证两种比较 的优先级 ???????
这个题是什么意思啊???

2 个回复

倒序浏览
就是说让你同时用两种方法来比较,事实是比较器顺序优先于自然顺序
回复 使用道具 举报
[AppleScript] 纯文本查看 复制代码
package com.heima.bean;
public class Student implements Comparable<Student> {
	private String name;
	private int age;
	public Student() {
		super();
	}
	public Student(String name, int age) {
		super();
		this.name = name;
		this.age = age;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	@Override
	public String toString() {
		return "Student [name=" + name + ", age=" + age + "]";
	}
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	@Override
	public int compareTo(Student o) {
		int num = this.age - o.age;
		return num == 0 ? this.name.compareTo(o.getName()):num;
	}
}
package com.heima.test;
import java.util.Comparator;
import java.util.TreeSet;
import com.heima.bean.Student;
public class Test10 {

	/**
	 *  * 10:编写一个Student类: 里面有 String name , int age 两个属性, TreeSet 保存5 个 学生对象, 要求:
         * 1:自然顺序(Comparable) 实现 按照年龄 从大到小 排列 
         * 2:比较器顺序(Comparator) 实现 按照 名字的长度排列(可以重复,不考虑年龄) 
         * 3:验证两种比较 的优先级 ???????
	 */
	public static void main(String[] args) {
		//* 1:自然顺序(Comparable) 实现 按照年龄 从大到小 排列 
		TreeSet<Student> ts1 = new TreeSet<>();//自然顺序排序,需要Person类实现Comparable接口并重写compareTo方法
			ts1.add(new Student("张三",23));
			ts1.add(new Student("李四",21));
			ts1.add(new Student("王五",24));
			ts1.add(new Student("赵六",20));
			ts1.add(new Student("周七",22));
			for (Student stu : ts1) {
				System.out.println(stu);
			}
			
			System.out.println("-----------------------------------");
		// * 2:比较器顺序(Comparator) 实现 按照 名字的长度排列(可以重复,不考虑年龄) 
		TreeSet<Student> ts2 = new TreeSet<>(new Comparator<Student>() {//比较器顺序(匿名内部类方式)

			@Override
			public int compare(Student s1, Student s2) {
				int num = s1.getName().length() - s2.getName().length();	//姓名长度是主要判断条件
				int num2 = num == 0 ? s1.getName().compareTo(s2.getName()): num; 
				return num2 == 0 ?  s1.getAge()-s2.getAge():num2;
			}
			
		});
		ts2.add(new Student("zhangsan",23));
		ts2.add(new Student("lisi",21));
		ts2.add(new Student("wangwu",24));
		ts2.add(new Student("zhaoliu",20));
		ts2.add(new Student("zhouqi",22));
		
		for (Student stu : ts2) {
			System.out.println(stu);
			
		}
		//ts2集合输出结果还是按照名字长度排序的,由此可以看出比较器顺序优先.
	}
}

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马