黑马程序员技术交流社区
标题:
关于数组随机乱序的问题
[打印本页]
作者:
想飞的鱼
时间:
2014-6-10 16:32
标题:
关于数组随机乱序的问题
本帖最后由 想飞的鱼 于 2014-6-15 12:00 编辑
ps: 妹妹在读小学,老师布置作业总让家长随机提问课后生字并默写(按顺序提写就不行么==!!)
所以写了个小程序,要求随机输出已存储的汉字,绞尽脑汁想起了三个思路,下面贴代码
请问各路大神随机排序都有哪些方法?那种最高效?如:洗牌,实际开发中都用什么?
/*
需求:随机输出存入的汉字,不能重复,不能缺少(就是随机乱序)
思路一:
1,将字符串按“,”切割,并返回String[]
2,遍历数组并将元素存入set集合
3,取出即使无序的----但是每一次运行都是一样的,因为hashset集合按哈希表存
思路二:
1,将字符串按“,”切割,并返回String[]
2,遍历数组并将元素存入List集合
3,使用Collections的shuffle方法随机排序
4,取出----随机,每次运行都不一样
思路三:如何不使用shuffle方法完成呢?
1,将字符串按“,”切割,并返回String[]
2,产生随机数,0——arr.length之间,但不重复,而且不能缺少数字(如随机生成0——10全有且不重复)
代码实现:用ArrayList集合,而不用set,因为set集合会按哈希表排序
3,将随机数当作数组角标取出对应元素
*/
import java.util.*;
class RandomWordTest
{
public static void main(String[] args)
{
String word = "衣,服,衬,衫,电,视,风,扇";
//randomSort_1(word);
//randomSort_2(word);
randomSort_3(word);
}
public static void randomSort_1(String word)
{
String [] arr = word.split(",");
Set<String> s = new HashSet<String>();
for (int x=0; x<arr.length; x++)
{
s.add(arr[x]);
}
int count = 1;
Iterator<String> it = s.iterator();
while (it.hasNext())
{
String word_2 = it.next();
System.out.println(count++ +"::"+word_2);
}
}
public static void randomSort_2(String word)
{
String [] arr = word.split(",");
List<String> l = new ArrayList<String>();
for (int x=0; x<arr.length; x++)
{
l.add(arr[x]);
}
Collections.shuffle(l);
int count = 1;
for(String str : l)
{
System.out.println(count++ +"::"+str);
}
}
public static void randomSort_3(String word)
{
String[] arr = word.split(",");
Random rd = new Random();
ArrayList<Integer> al = new ArrayList<Integer>();
while (true)
{
int num = rd.nextInt(arr.length);//产生随机数,0——arr.length之间,符合arr的角标
Integer i = Integer.valueOf(num);//将num转成Integer对象
if (!al.contains(i))
al.add(Integer.valueOf(num));//如果ArrayList集合不包含这个数,才存入
if (al.size()==arr.length)//当集合的长度等于了数组的长度,则表示角标全有了且随机乱序,跳出循环
break;
}
int count = 1;
for(Integer in : al)
{
int index = in.intValue();
System.out.println(count++ +"::"+arr[index]);//按照随机乱序的角标取出相应元素
}
}
}
复制代码
作者:
月光海
时间:
2014-6-10 16:47
代码木有看,对List集合随机排序不是有Collections类中的方法么,好像是以s开头的,记不清了,你去看看API把
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2