哪种方法最好?现在,我将JSONArray
转换为自定义类的ArrayList
,使用Collections.shuffle()
执行操作,然后转换回JSONArray
,这似乎太过分了高架。
答案可能只是实施一个 Fisher-Yates shuffle因为它,但我的猜测是,这可能已经完成,所以我想避免重新发明轮子。 我查看了标准JSON api和Google's Gson,但它们似乎没有任何实现。
标准数组in this question也有简单的选项可以轻松移植到java,但我很乐意听到您的输入。令我感到惊讶的是,查询http://www.google.com/search?q=java+shuffle+jsonarray并没有让我充满方法。
答案 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)
当语言已经内置了非常好的List
和Map
接口时,使用不需要转换为某种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。
答案 2 :(得分:1)
你的方法效果很好,但不要忘记:
rnd.setSeed(System.currentTimeMillis());
这样每次结果都是唯一的。
很抱歉新答案,我没有足够的代表发表评论:/