为什么随机选择的数字输出包含重复?

时间:2013-03-21 17:53:49

标签: java random arraylist

我的代码需要从145的列表中随机选择6个数字。

当我运行我的代码(下面)时,输出为[4, 4, 17, 18, 27, 37]我没想到输出中有任何重复。怎么可能存在重复项?我的代码应该从list中删除数字。

    Random rng = new Random(); 
    int size = 45;
    int sixList[] = new int[6];
    ArrayList<Integer> list = new ArrayList<Integer>(size);
    ArrayList<Integer> list2 = new ArrayList<Integer>(6);
    for(int i = 1; i <= size; i++) {
        list.add(i);
    }
    Random rand = new Random();
    for(int i = 0; list.size() > 39; i++){
        int index = rand.nextInt(list.size());
        if (index == 0){
            index = rand.nextInt(list.size());
            list2.add(index);
            list.remove(index);
        }else{
            list2.add(index);
            list.remove(index);
        }
    }
    Collections.sort(list2);
    System.out.print(list2);

2 个答案:

答案 0 :(得分:1)

问题是您要将索引值添加到随机数列表中。

更改您的代码

list2.add(index);
list.remove(index);

list2.add(list.remove(index));

答案 1 :(得分:0)

列出维护索引,根本不关心重复元素。为避免重复,您必须使用Set而不是List。如果在Set中有任何用户定义的类,那么不要忘记实现equals()和hashcode(),它们用于确定元素是否与HashSet等Set类重复。

如果你有原语进入Set,那么忘记重复,因为重复项将自动处理原始数据类型,如int,long等。所以我建议你使用Set而不是List。避免集合中的重复元素