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

这是最好的方法吗? 现在,我将我的JSONArray转换为自定义类的ArrayList ,使用Collections.shuffle()来执行操作,并转换回JSONArray ,这似乎是太多的开销。

答案可能只是为了实现Fisher-Yates洗牌 ,但我的猜测是这可能已经完成所以我想避免重新发明轮子。 我查看了标准的JSON api和Google的Gson,但它们似乎没有任何实现。

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

很抱歉发布了我自己的问题的答案,但是现在,由于没有开箱即用的快速解决方案,我正在实现我自己的基于此post代码的静态shuffle函数: 随机洗牌的数组 。 仍然期待听到最好的实施。 这就是我做的:

 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; } 

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

http://code.google.com/p/prebake/source/browse/trunk/code/src/org/prebake/js/JsonSink.java和http://code.google.com/p/prebake/source/例如,browse / trunk / code / src / org / prebake / js / JsonSource.java 。

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

 rnd.setSeed(System.currentTimeMillis()); 

这样每次结果都是独一无二的。

对不起,新的答案,我没有足够的代表发表评论:/