使用Random产生100个无重复随机数,使用Set存储和使用位图存储的效率对比
2012-09-05 00:00
288 查看
今天读《编程珠玑》开篇就被里面的内容深深的吸引住了,很后悔之前只是单单听说它的大名,却从没有拜读,胜感遗憾。
粗略的看了第一章关于位图数据结构的:该数据结构描述了一个有限定义域内的稠密集合,每个元素并且出现一次没有与其他数有关联。
于是想到了想用随机数来测试一下,看看效果如何。
背景:使用随机书产生1000个不相同的数字,并且按从小到大排列。
(1)采用java的Set数据结构存储,并进行排序,代码如下:
(2)采用位图数据结构,具体代码如下:
测试结果:
(1)采用Set数据结构花费的时间:6ms。
(2)采用位图数据结构花费的时间:1ms.
从上面的测试结果,让我想到了百度以前的一道笔试题,在最大的数小于500万的数中存在两个相同的数,将其找出来,要求花费最少的时间,和空间(大致好像就是这个意思),个人感觉采用位图数据结构应该是很不错的方法。
粗略的看了第一章关于位图数据结构的:该数据结构描述了一个有限定义域内的稠密集合,每个元素并且出现一次没有与其他数有关联。
于是想到了想用随机数来测试一下,看看效果如何。
背景:使用随机书产生1000个不相同的数字,并且按从小到大排列。
(1)采用java的Set数据结构存储,并进行排序,代码如下:
[code=language-java] Set<Integer> datas= new HashSet<Integer>(); Random random = new Random(); int i = 0; long start = System.currentTimeMillis(); while (i < 1000) { int a = Math.abs(random.nextInt() % 1000); if (datas.add(a)) { i++; } } Arrays.sort(datas.toArray()); long end = System.currentTimeMillis(); System.out.println("set 花费时间:" + (end - start));
(2)采用位图数据结构,具体代码如下:
[code=language-java] byte[] b = new byte[1001]; int i = 0; Random random = new Random(); long start = System.currentTimeMillis(); while (i < 1000) { int a = Math.abs(random.nextInt() % 1000); if (b[a] == 0) { b[a] = 1; i++; } } long end = System.currentTimeMillis(); System.out.println("位图 花费的时间:" + (end - start));
测试结果:
(1)采用Set数据结构花费的时间:6ms。
(2)采用位图数据结构花费的时间:1ms.
从上面的测试结果,让我想到了百度以前的一道笔试题,在最大的数小于500万的数中存在两个相同的数,将其找出来,要求花费最少的时间,和空间(大致好像就是这个意思),个人感觉采用位图数据结构应该是很不错的方法。
相关文章推荐
- c# Random太快产生的随机数会重复
- .net中使用Random()产生一个随机数
- 设计程序,单击【随机数】按钮,使用Math对象的random函数产生一个0-100之间(含0-100)的随机整数,并在对话框中显示,如下图。单击【计算】按钮,计算该随机数的平方、平方根和自然对数,保留两位小数,并在对话框中显示,如下图。
- cryptography 使用RandomNumberGenerator产生加密强随机数
- 福彩双色球中红球由6个1-33之间的数字组合,且不重复,编写代码,使用Set集合来存储随机生成的1-33的数字,然后输出生成的数字
- 使用HashSet存储10个1-20之间的随机数,并且要求随机数不重复。
- C# Random对象短时间内产生不重复的随机数
- java7新特性——使用ThreadLocalRandom产生并发随机数
- 使用Random函数产生随机数
- java7新特性——使用ThreadLocalRandom产生并发随机数
- java 使用hashset产生不重复的随机数
- c# Random太快产生的随机数会重复
- java7新特性——使用ThreadLocalRandom产生并发随机数
- 如何产生1-100之间的100个不重复的随机数
- oracle中使用DBMS_RANDOM去产生随机数
- c# Random太快产生的随机数会重复
- java中Random(long seed)方法与rRandom()方法的使用产生随机数
- 如何产生1-100 之间的100个不重复的随机数
- 关于产生随机数,使用同一个Random()和不同Random()的区别。
- 使用Arraylist产生不重复的随机数