在java中混洗JSON数组的有效方法?

时间:2011-04-03 17:14:02

标签: java arrays json shuffle

哪种方法最好?现在,我将JSONArray转换为自定义类的ArrayList,使用Collections.shuffle()执行操作,然后转换回JSONArray,这似乎太过分了高架。

答案可能只是实施一个 Fisher-Yates shuffle因为它,但我的猜测是,这可能已经完成,所以我想避免重新发明轮子。 我查看了标准JSON apiGoogle's Gson,但它们似乎没有任何实现。

标准数组in this question也有简单的选项可以轻松移植到java,但我很乐意听到您的输入。令我感到惊讶的是,查询http://www.google.com/search?q=java+shuffle+jsonarray并没有让我充满方法。

3 个答案:

答案 0 :(得分:10)

很抱歉发布了我自己的问题的答案,但是现在,由于没有开箱即用的快速解决方案,我正在根据此帖子中的代码实现我自己的静态shuffle函数:{{ 3}}。仍然期待听到最好的实施。这就是我所做的:

public static JSONArray shuffleJsonArray (JSONArray array) throws JSONException {
    // Implementing Fisher–Yates shuffle
        Random rnd = new Random();
        for (int i = array.length() - 1; i >= 0; i--)
        {
          int j = rnd.nextInt(i + 1);
          // Simple swap
          Object object = array.get(j);
          array.put(j, array.get(i));
          array.put(i, object);
        }
    return array;
}

答案 1 :(得分:1)

当语言已经内置了非常好的ListMap接口时,使用不需要转换为某种JSON数据结构的JSON库。

例如,

http://code.google.com/p/prebake/source/browse/trunk/code/src/org/prebake/js/JsonSink.javahttp://code.google.com/p/prebake/source/browse/trunk/code/src/org/prebake/js/JsonSource.java

答案 2 :(得分:1)

你的方法效果很好,但不要忘记:

rnd.setSeed(System.currentTimeMillis());

这样每次结果都是唯一的。

很抱歉新答案,我没有足够的代表发表评论:/