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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© songyu 中级黑马   /  2015-6-16 16:20  /  1059 人查看  /  13 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. import java.util.HashSet;
  2. import java.util.Random;


  3. public class Demo {

  4.        
  5.         public static void main(String[] args) {
  6.                
  7.                
  8.                 HashSet<Integer> set = new HashSet<Integer>();
  9.                
  10.                 while(set.size()<10){
  11.                        
  12.                         Random random = new Random();
  13.                        
  14.                         int number = random.nextInt(10);
  15.                        
  16.                         set.add(number);
  17.                        
  18.                 }
  19.                 System.out.println(set);

  20.         }

  21. }
复制代码
明明用到了Random为什么运行时不是随机的!

13 个回复

倒序浏览
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
你定义的长度有10个数,所以出现1到10
set的特点就是会自带排序,所以打印出的结果是有序的,你用arraylist就不会这样了
回复 使用道具 举报
银哥 发表于 2015-6-16 16:58
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
你定义的长度有10个数,所以出现1到10
set的特点就是会自带排序,所以打印出 ...

set 集合不是无序并且元素唯一的吗.
回复 使用道具 举报
银哥 发表于 2015-6-16 16:58
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
你定义的长度有10个数,所以出现1到10
set的特点就是会自带排序,所以打印出 ...

set集合不是无序元素唯一的吗?
回复 使用道具 举报
songyu 发表于 2015-6-16 17:14
set集合不是无序元素唯一的吗?

无序是指放入和拿出的顺序不一样
比如你放的是9 0 1 3 2 4 6 5 7 8
由于set会排序  所以拿出的顺序是0, 1, 2, 3, 4, 5, 6, 7, 8, 9

回复 使用道具 举报
今天的视频,看了居然没记住!我深感失望,不过在此重温,激动!
回复 使用道具 举报
songyu 中级黑马 2015-6-16 17:43:58
7#
银哥 发表于 2015-6-16 17:18
无序是指放入和拿出的顺序不一样
比如你放的是9 0 1 3 2 4 6 5 7 8
由于set会排序  所以拿出的顺序是0, 1 ...

好吧,我再试试
回复 使用道具 举报
songyu 中级黑马 2015-6-16 17:45:17
8#
日薄星回 发表于 2015-6-16 17:27
今天的视频,看了居然没记住!我深感失望,不过在此重温,激动!

多练,多练.
回复 使用道具 举报
不是Random的问题,是HashSet集合的问题。你可以直接循环输出随机元素,二不用HashSet集合,就能得到随机结果。还可以放大数的范围,比如随机到100,输出时除10,也可得到随机结果。原因在于HashSet集合内部默认排序方式,它是有利于随机查找的散列(hash)的顺序排列的,而不是元素加入顺序。便利顺序跟hashCode()有关,却也不是按照hashCode()值遍历的。
回复 使用道具 举报
不是Random的问题,是HashSet集合的问题。你可以直接循环输出随机元素,二不用HashSet集合,就能得到随机结果。还可以放大数的范围,比如随机到100,输出时除10,也可得到随机结果。原因在于HashSet集合内部默认排序方式,它是有利于随机查找的散列(hash)的顺序排列的,而不是元素加入顺序。便利顺序跟hashCode()有关,却也不是按照hashCode()值遍历的。
回复 使用道具 举报
银哥 发表于 2015-6-16 17:18
无序是指放入和拿出的顺序不一样
比如你放的是9 0 1 3 2 4 6 5 7 8
由于set会排序  所以拿出的顺序是0, 1 ...

银哥说的不对吧,默认自然顺序。可以自定义排序准则,而非放入拿出的顺序。
回复 使用道具 举报
package test;
回复 使用道具 举报
方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1)) 例: (int)(1+Math.random()*(10-1+1)) 从1到10的int型随数 方法2 获得随机数 for (int i=0;i<30;i++) {System.out.println((int)(1+Math.random()*10));} (int)(1+Math.random()*10) 通过java.Math包的random方法得到1-10的int随机数 公式是:最小值---最大值(整数)的随机数 (类型)最小值+Math.random()*最大值 方法3 Random ra =new Random(); for (int i=0;i<30;i++) {System.out.println(ra.nextInt(10)+1);} 通过java.util包中的Random类的nextInt方法来得到1-10的int随机数
回复 使用道具 举报
方法1
(数据类型)(最小值+Math.random()*(最大值-最小值+1))
例:
(int)(1+Math.random()*(10-1+1))
从1到10的int型随数
方法2
获得随机数
for (int i=0;i<30;i++)
{System.out.println((int)(1+Math.random()*10));}
(int)(1+Math.random()*10)
通过java.Math包的random方法得到1-10的int随机数
公式是:最小值---最大值(整数)的随机数
(类型)最小值+Math.random()*最大值
方法3
Random ra =new Random();
for (int i=0;i<30;i++)
{System.out.println(ra.nextInt(10)+1);}
通过java.util包中的Random类的nextInt方法来得到1-10的int随机数
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马