本视频是解读性视频,所以希望您已经看过了本知识点的内容,并且编写了相应的代码之后,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
1分39秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器 示例 1 : 是否有顺序 示例 2 : 能否重复 示例 3 : 练习-不重复的随机数 示例 4 : 答案-不重复的随机数
ArrayList: 有顺序
HashSet: 无顺序 HashSet的具体顺序,既不是按照插入顺序,也不是按照hashcode的顺序。关于hashcode有专门的章节讲解: hashcode 原理。 以下是HasetSet源代码中的部分注释 /** * It makes no guarantees as to the iteration order of the set; * in particular, it does not guarantee that the order will remain constant over time. */ 不保证Set的迭代顺序; 确切的说,在不同条件下,元素的顺序都有可能不一样 换句话说,同样是插入0-9到HashSet中, 在JVM的不同版本中,看到的顺序都是不一样的。 所以在开发的时候,不能依赖于某种臆测的顺序,这个顺序本身是不稳定的 package collection;
import java.util.ArrayList;
import java.util.HashSet;
public class TestCollection {
public static void main(String[] args) {
ArrayList<Integer> numberList =new ArrayList<Integer>();
//List中的数据按照插入顺序存放
System.out.println("----------List----------");
System.out.println("向List 中插入 9 5 1");
numberList.add(9);
numberList.add(5);
numberList.add(1);
System.out.println("List 按照顺序存放数据:");
System.out.println(numberList);
System.out.println("----------Set----------");
HashSet<Integer> numberSet =new HashSet<Integer>();
System.out.println("向Set 中插入9 5 1");
//Set中的数据不是按照插入顺序存放
numberSet.add(9);
numberSet.add(5);
numberSet.add(1);
System.out.println("Set 不是按照顺序存放数据:");
System.out.println(numberSet);
}
}
List中的数据可以重复
Set中的数据不能够重复 重复判断标准是: 首先看hashcode是否相同 如果hashcode不同,则认为是不同数据 如果hashcode相同,再比较equals,如果equals相同,则是相同数据,否则是不同数据 更多关系hashcode,请参考hashcode原理 package collection;
import java.util.ArrayList;
import java.util.HashSet;
public class TestCollection {
public static void main(String[] args) {
ArrayList<Integer> numberList =new ArrayList<Integer>();
//List中的数据可以重复
System.out.println("----------List----------");
System.out.println("向List 中插入 9 9");
numberList.add(9);
numberList.add(9);
System.out.println("List 中出现两个9:");
System.out.println(numberList);
System.out.println("----------Set----------");
HashSet<Integer> numberSet =new HashSet<Integer>();
System.out.println("向Set 中插入9 9");
//Set中的数据不能重复
numberSet.add(9);
numberSet.add(9);
System.out.println("Set 中只会保留一个9:");
System.out.println(numberSet);
}
}
生成50个 0-9999之间的随机数,要求不能有重复的
在查看答案前,尽量先自己完成,碰到问题再来查看答案,收获会更多
本视频是解读性视频,所以希望您已经看过了本答案的内容,带着疑问来观看,这样收获才多。 不建议一开始就观看视频
1分14秒 本视频采用html5方式播放,如无法正常播放,请将浏览器升级至最新版本,推荐火狐,chrome,360浏览器。 如果装有迅雷,播放视频呈现直接下载状态,请调整 迅雷系统设置-基本设置-启动-监视全部浏览器 (去掉这个选项)。 chrome 的 视频下载插件会影响播放,如 IDM 等,请关闭或者切换其他浏览器
使用Set来存放随机数,不断的向里塞,直到塞满50个位置。 因为Set有不重复的特性,所以最后得到的50个,就一定是不重复的
package collection;
import java.util.HashSet;
import java.util.Set;
public class TestCollection {
public static void main(String[] args) {
Set<Integer> numbers =new HashSet<>();
while(numbers.size()<50){
int i = (int) (Math.random()*10000);
numbers.add(i);
}
System.out.println("得到50个不重复随机数:");
System.out.println(numbers);
}
}
package collection; import java.util.HashSet; import java.util.Set; public class TestCollection { public static void main(String[] args) { Set<Integer> numbers =new HashSet<>(); while(numbers.size()<50){ int i = (int) (Math.random()*10000); numbers.add(i); } System.out.println("得到50个不重复随机数:"); System.out.println(numbers); } }
HOW2J公众号,关注后实时获知最新的教程和优惠活动,谢谢。
问答区域
2024-07-11
通过HashSet实现生成指定数量不重复的随机数
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2023-09-05
答案-不重复的随机数
3 个答案
晚安嘛 跳转到问题位置 答案时间:2024-03-29 for(int i=0;i<50;i++){
hashSet.add(rand.nextInt(9999));
}这里我认为有点错,因为题目上是生成50个不同的随机数,如果只运行50次,很难保证吧,条件应该是当HashSet它的长度达到50再结束,就这一点点瑕疵。
wr123 跳转到问题位置 答案时间:2023-11-28 package collection;
import java.util.HashMap;
import java.util.*;
import java.util.Map.Entry;
import charactor.Hero;
public class TestCollection {
public static void main(String[] args) {
HashSet<Integer> hashSet=new HashSet<>();
Random rand = new Random();
for(int i=0;i<50;i++){
hashSet.add(rand.nextInt(9999));
}
System.out.println(hashSet);
}
}
玉子 跳转到问题位置 答案时间:2023-11-02 /**
* 生成50个 0-9999之间的随机数,要求不能有重复的
*/
public static void t1(){
HashSet<Integer> sjs=new HashSet<>();
while (sjs.size()<50){
Random random = new Random();
int num = random.nextInt(9999);
sjs.add(num);
}
System.out.println(sjs+"size=="+sjs.size());
}
回答已经提交成功,正在审核。 请于 我的回答 处查看回答记录,谢谢
2022-05-31
答案
2021-08-17
练习-我的答案
2021-08-17
答案
提问太多,页面渲染太慢,为了加快渲染速度,本页最多只显示几条提问。还有 29 条以前的提问,请 点击查看
提问之前请登陆
提问已经提交成功,正在审核。 请于 我的提问 处查看提问记录,谢谢
|