如何手动洗牌阵列列表

时间:2014-04-02 11:00:38

标签: java arraylist

我有一个arraylist包含一些订单中的值(正确的位置),现在我想刷卡/设置/手动shuffle将值更改为arraylist的无序。下图可以给出我的想法。将Array-II更改为Array-I。为了洗牌我们可以使用collection.shuffle(),但是这里我有一个文本文件,在该文本文件中我写了一个原始位置以及数组中数据的当前位置到文本文件。例如成像,我们有一个文本文件名MyFile.txt,我写的数据就像这样," original_position~Current_position"例如 0〜0 1〜2 2〜4 3〜3 4〜1 所以,基于上面的数据,我会改组/设置数组。

3 个答案:

答案 0 :(得分:7)

使用Collections.shuffle(YOUR_ARRAY_LIST);来执行此操作。

    List<String> ranList = new ArrayList<String>();
    // populate the list
    ranList.add("A");
    ranList.add("B");
    ranList.add("C");
    System.out.println("Initial collection: " + ranList);
    // shuffle the list
    Collections.shuffle(ranList);
    System.out.println("Final collection after shuffle: " + ranList);

手动排序的方法如下:

阅读并将您的数据从文件添加到Map

    private static Map<String, String> readFile(String fileNameWithPath) throws Exception {
    Map<String, String> map = new LinkedHashMap<String, String>();
    File file = new File(fileNameWithPath);
    BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
    String sCurrentLine;
    String[] splitPosition;
    while ((sCurrentLine = bufferedReader.readLine()) != null) {
        splitPosition = sCurrentLine.split("~");
        map.put(splitPosition[0], splitPosition[1]);
    }
    return map;
}

你的主要方法是:

   try {
        List<String> list = new ArrayList<String>();
        List<String> customeRandomList = new LinkedList<String>();
        list.add("A");
        list.add("B");
        list.add("C");
        list.add("D");
        list.add("E");
        Map<String, String> map = Test.readFile("D://RandomList.txt");
        for (Map.Entry<String, String> entry : map.entrySet()) {
            customeRandomList.add(list.get(Integer.parseInt(entry.getValue())));
        }
        for (String result : customeRandomList) {
            System.out.println(result);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

答案 1 :(得分:4)

Collections.shuffle()会为你做的。 Collections.sort()如果要对其进行排序,将按自然顺序(A,B,C,D,E ..)对其进行排序。

答案 2 :(得分:2)

在这里,我找到了我的问题的解决方案,请在这里观察。 &#34; itemList_dump&#34;是一个包含数据的arraylist。

if (i < itemList_dump.size()) {

    MyBitamp Data = itemList_dump.get(original_position_val);
            // setting Values according to our algorithm
                    Data.setItemCurPos(original_position_val);
                    Data.setItemPosition(current_positon_val);
                    Data.setrotation(rotataion_val);

                }
            }
            Collections.sort(itemList_dump, new Comparator<MyBitamp>() {

                @Override
                public int compare(MyBitamp o1, MyBitamp o2) {
                    if (o1.getItemPosition() > o2.getItemPosition()) {
                        return 1;
                    } else if (o1.getItemPosition() < o2.getItemPosition()) {
                        return -1;
                    } else {
                        return 0;
                    }
                }
            });