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

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

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

public class HomeWork6Compare {

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

			@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<Student1> 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());
	}
}

运行截图如下图

在这里插入图片描述

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

  • 1
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值