随机取值,不能重复。

List datas = new ArrayList<>();
datas.add("鼠");
datas.add("牛");
datas.add("虎");
datas.add("兔");
datas.add("龙");
datas.add("蛇");
datas.add("马");
datas.add("羊");
datas.add("猴");
datas.add("猪");
datas.add("狗");
datas.add("鸡");
取出来的值要求是这样的比如:鸡,狗,羊

 public static void main(String[] args) {
        //1.打印动物个数
        int count = 3;
        //2.初始化集合
        List<String> datas = new ArrayList<String>();
        datas.add("鼠");
        datas.add("牛");
        datas.add("虎");
        datas.add("兔");
        datas.add("龙");
        datas.add("蛇");
        datas.add("马");
        datas.add("羊");
        datas.add("猴");
        datas.add("猪");
        datas.add("狗");
        datas.add("鸡");
        //3.定义结果变量
        StringBuilder res = new StringBuilder();
        //4.获取随机索引
        Set<Integer> set = new HashSet<Integer>();
        for (int i=0;i<count;i++){
            int index = (int) (Math.random() * datas.size());
            int size = set.size();
            set.add(index);
            if(set.size() == size) {//判断重复
                i--;
                continue;
            }
            res.append(datas.get(index)).append(",");
        }
        //5.去除默认逗号
        if(',' == res.charAt(res.length()-1))
            res = res.deleteCharAt(res.length()-1);
        System.out.println(res);

    }

结果:鼠,牛,猪

建立一个索引数组,然后从索引数组中随机取出一个来指向datas中的一个元素,同时删除索引数组中的某个索引,这样下一次随机取出索引时就不会取出与上次相同的索引

先取出arraylist的Count,然后随机函数 Random(0,Count) 取出随即出来的索引
arraylist[取出的索引] 就是随机出来的值。至于重复问题基本思路是取得list的指定数目的不重复的index,并取得list中这些index的值组成新的list即可。为了确保index不重复,可以map,利用map.containsKey()方法来判断下标是否存在。为了得到指定的数目使用可以用循环实现。

public static void main(String[] args) {
// TODO Auto-generated method stub
//从list中随机抽取n个不同的元素
List datas = new ArrayList();
List listNew = new ArrayList();
datas.add("鼠");
datas.add("牛");
datas.add("虎");
datas.add("兔");
datas.add("龙");
datas.add("蛇");
datas.add("马");
datas.add("羊");
datas.add("猴");
datas.add("猪");
datas.add("狗");
datas.add("鸡");
listNew = createRandomList(list,3);
//从数组中随机抽取元素
int[] arr = {1,2,3,4,5};
int[] arrNew;
arrNew = createRandomArray(arr,3);
}

/**从数组中随机抽取元素
 * @return  
 * @Title: createRandomArray 
 * @Description: TODO
 * @param arr
 * @param i 
 * @return void  
 * @throws 
 */ 
private static int[] createRandomArray(int[] arr, int n) {
    // TODO Auto-generated method stub
    Map map = new HashMap();
    int[] arrNew = new int[n];
    if(arr.length<=n){
        return arr;
    }else{
        int count = 0;//新数组下标计数
        while(map.size()<n){
            int random = (int) (Math.random() * arr.length);
            if (!map.containsKey(random)) {
                map.put(random, "");
                System.out.println(random+"==========="+arr[random]);
                arrNew[count++] = arr[random];
            }
        }
        return arrNew;
    }
}

/**从list中随机抽取元素
 * @return  
 * @Title: createRandomList 
 * @Description: TODO
 * @param list
 * @param i 
 * @return void  
 * @throws 
 */ 
private static List createRandomList(List list, int n) {
    // TODO Auto-generated method stub
    Map map = new HashMap();
    List listNew = new ArrayList();
    if(list.size()<=n){
        return list;
    }else{
        while(map.size()<n){
            int random = (int) (Math.random() * list.size());
            if (!map.containsKey(random)) {
                map.put(random, "");
                System.out.println(random+"==========="+list.get(random));
                listNew.add(list.get(random));
            }
        }
        return listNew;
    }
}

}

身边没电脑,这个问题又刚好是我以前看见过的,我就直接把博主的转过来了,具体网址https://blog.csdn.net/u011526599/article/details/51126006
你想深入了解可以去看一看

    final int TEST_TIMES = 100;
    final int RESULTS_NUM = 3;

    for (int n = 0; n < TEST_TIMES; n++) {
        System.out.println("--------- 第" + (n + 1) + "次结果 ---------");
        List<String> results = new ArrayList<>(RESULTS_NUM);

        int num = 0;
        while (num < RESULTS_NUM) {
            int index = new Random().nextInt(datas.size());
            String data = datas.get(index);
            if (results.contains(data)) {
                continue;
            }
            results.add(data);
            num++;
        }

        System.out.println(results);
    }
 public static void main(String[] args) {
        //1.初始化集合
        List<String> datas = new ArrayList<String>();
        datas.add("鼠");
        datas.add("牛");
        datas.add("虎");
        datas.add("兔");
        datas.add("龙");
        datas.add("蛇");
        datas.add("马");
        datas.add("羊");
        datas.add("猴");
        datas.add("猪");
        datas.add("狗");
        datas.add("鸡");
        //2.打印动物个数(随机)
        int count = (int) (Math.random() * datas.size());
        //3.定义结果变量
        StringBuilder res = new StringBuilder();
        //4.获取随机索引
        Set<Integer> set = new HashSet<Integer>();
        for (int i=0;i<count;i++){
            int index = (int) (Math.random() * datas.size());
            int size = set.size();
            set.add(index);
            if(set.size() == size) {//判断重复
                i--;
                continue;
            }
            res.append(datas.get(index)).append(",");
        }
        //5.去除默认逗号
        if(',' == res.charAt(res.length()-1))
            res = res.deleteCharAt(res.length()-1);
        System.out.println(res);

    }

先取出arraylist的Count,然后随机函数 Random(0,Count) 取出随即出来的索引
arraylist[取出的索引] 就是随机出来的值。至于重复问题基本思路是取得list的指定数目的不重复的index,并取得list中这些index的值组成新的list即可。为了确保index不重复,可以map,利用map.containsKey()方法来判断下标是否存在。为了得到指定的数目使用可以用循环实现。1

重新做个中间数组存好取length以length为max去随机再用一个新数组存不就好了,然后在中间数组那里remove原来的项loop前面的方法