我应该选择i>对于随机改组,1或i> = 1

时间:2016-03-11 00:53:53

标签: java arraylist random collections

我试图以随机的方式对整数的ArrayList进行洗牌。我想出了下面的代码。但是,我怀疑这是正确的做法。我已经阅读了for(int i = list.size(); i >= 1; i--)中的某个地方:

public static void shuffling(List<?> list, Random rnd){
    for(int i = list.size(); i >= 1; i--){
        swap(list, i - 1, rnd.nextInt(i));
    }
}

应该改为:

for(int i = list.size(); i > 1; i--)

但如果我选择将其写为i > 1而不是i >= 1,那么我是不是忽略了ArrayList中的第一项?任何人对于解决这个问题的正确方法有什么建议吗?

我的代码:

public class TheCollectionInterface {

    public static <E> void swap(List<E> a, int i, int j){
        E temp = a.get(i);
        a.set(i, a.get(j));
        a.set(j, temp);
    }

    public static void shuffling(List<?> list, Random rnd){
        for(int i = list.size(); i >= 1; i--){
            swap(list, i - 1, rnd.nextInt(i));
        }
    }

    public static void main(String[] args) {

        List<Integer> li1 = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));

        Random r1 = new Random();

        TheCollectionInterface.shuffling(li1, r1);

        System.out.println(li1);
    }
}

2 个答案:

答案 0 :(得分:2)

当在这个循环中i = 1时,唯一要选择的元素是第0个元素,并且使用第0个元素交换第0个元素是微不足道的,并且不起作用。因此,您不需要使用i = 1进入循环,您可以将i > 1作为条件。

答案 1 :(得分:-1)

当然,

Collections.shuffle,如果您不想自己动手。

How to randomize ArrayList?