本帖最后由 想飞的鱼 于 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]);//按照随机乱序的角标取出相应元素
- }
- }
- }
复制代码
|
|