java中TreeSet存储Random生成的随机数没有去重

  • 写一个Student类, 包含属性id[1-30), grade[1-6], score[0-100], 所有属性都是随机生成
    创建一个Set集合, 保存20个对象, 如果两个对象的id是一样的,则不允许添加. 使用迭代器遍历集合,打印输出对象的信息,
    并找出分数最高的同学和分数最低的同学, 最后打印输出最高分和最低分同学信息.

本人写的利用TreeSet的代码如下

public class HomeWork6Compare {

	public static void main(String[] args) {
		TreeSet set = new TreeSet(new Comparator() {

			@Override
			public int compare(Student1 stu1, Student1 stu2) {
				if(stu1.id == stu2.id) {
					return 0;
				}
				
				int result = stu1.score - stu2.score;
				if(result == 0) {
					return 1;
				}
				
				return result;
			}
			
		});
		Random r = new Random();
		Student1 s = null;
		int id=0,grade=0,score=0;
		
		while(set.size()<20) {
			id = r.nextInt(29)+1;
			grade = r.nextInt(6)+1;
			score = r.nextInt(100)+1;
			s = new Student1(id, grade, score);
			set.add(s);
		}
		
		Iterator iterator = set.iterator();
		while(iterator.hasNext()) {
			System.out.println(iterator.next());
		}
		System.out.println("分数最高的同学信息如下:");
		System.out.println(set.first());
		System.out.println("分数最低的同学信息如下:");
		System.out.println(set.last());
	}
}

运行截图如下图

java中TreeSet存储Random生成的随机数没有去重_第1张图片

发现运行结果中有多组重复id,经过几次检查也没发现compare方法有什么错误,后面自己取消随机数输入数据,手写了二十几组数据却发现没有重复id出现(这里就不拿出源码和运行截图,有兴趣的自己可以试试),后用HashSet去重,TreeSet排序解决了这个问题,但还是不懂单纯的TreeSet为什么不能做到去重,求大神指点。

你可能感兴趣的:(零碎)