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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© aoejhx 中级黑马   /  2016-1-12 11:24  /  853 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

public static void main(String[] args) {
       
                for (int i = 0; i <=10 ; ) {
                       
                Random r =new Random();
               
                HashSet<Integer> hs = new HashSet<>();
               
                if(hs.add(r.nextInt(20)+1))
                    i++;
                System.out.print(hs);
                }
        }
}

5 个回复

倒序浏览
奇怪了,可能你需要看下hashcode或equals方法是不是重写了
回复 使用道具 举报
你创建了10个HashSet,往10个HashSet中添加一个数字再打印,而不是往一个Set里添加是个数字,当然有可能出现重复的了
回复 使用道具 举报
public static void main(String[] args) {
        
               //demo1();
                        HashSet<Integer> hs = new HashSet<>();
                        Random r = new Random();
                        for (int i = 0; i < 10; i++) {
                                hs.add(r.nextInt(20));
                        }
                        System.out.println(hs);
        }
原因是因为你把建立集合放到了for循环里面,等于是你建立了十个集合,所以会出现重复的数字;起初没注意看,还以为是没重写方法,后来想了想,这些基本数据都是写好了的.
回复 使用道具 举报 1 0
原因是,你这个代码其实是创建了11个HashSet集合,每次就遍历往一个集合里加一个元素,尽管HashSet具有元素不重复的特点,但是前提是在同一个集合里的元素,而你这得到的结果是11个集合里每个集合的第一个元素的值~所以就可能出现重复的值.
回复 使用道具 举报
哦,明白了。谢谢楼上各位的解答
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马