【问题标题】:permute/scramble arraylist elements in javajava中的置换/加扰arraylist元素
【发布时间】:2011-02-22 04:35:44
【问题描述】:

假设我有整数数组列表...有没有办法可以生成数组列表中元素的随机排列/排列

所以如果列表是 {1,2,3,4,5,6}

调用一些方法 randomPermute() 会将其更改为随机的类似

{1,3,2,6,5,4}

【问题讨论】:

    标签: java data-structures random arraylist permutation


    【解决方案1】:

    Collections.shuffle() 完成这项工作:

    public static void shuffle(List<?> list) - 使用默认随机源随机排列指定列表。所有排列都以大致相等的可能性发生。 http://download.oracle.com/javase/6/docs/api/java/util/Collections.html#shuffle(java.util.List)

    例如

        ArrayList<Integer>anArrayList = new ArrayList<Integer>();
        anArrayList.add(1);
        anArrayList.add(2);
        anArrayList.add(3);
        anArrayList.add(4);
        anArrayList.add(5);
        System.out.println(anArrayList);
        Collections.shuffle(anArrayList);
        System.out.println(anArrayList);
    

    样本输出

    [1, 2, 3, 4, 5]
    [3, 5, 1, 2, 4]
    

    【讨论】:

      【解决方案2】:

      您可以使用Knuth shuffle:遍历位置 1 到 n-1,并且对于每个位置,我将当前存在的元素与从位置 i 到 n(包括在内)任意选择的元素交换。

      编辑:hooch 的答案更好。 :)

      【讨论】:

        【解决方案3】:

        一个简单的例子:

        ArrayList<MyObject> myObjects = new ArrayList<MyObject>();
        //code -- load myObjects...
        
        Collections.shuffle(myObjects);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-27
          • 2014-04-08
          • 1970-01-01
          • 2023-04-06
          相关资源
          最近更新 更多