2011-04-03 62 views
3

这将是最好的办法吗?现在,我将我的JSONArray转换为自定义类的ArrayList,使用Collections.shuffle()执行该操作,并将其转换回JSONArray,这似乎是太多的开销。在java中洗牌JSON数组的有效方法?

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

标准数组in this question也有简单的选项,可以很容易地移植到java,但我很乐意听到您的意见。我很惊讶,查询http://www.google.com/search?q=java+shuffle+jsonarray没有洪水与方法。

+1

“似乎是开销太大” - 你异形它,或者这只是一个猜测?如果这只是一个猜测,那么对它进行分析,然后确定它是否真的是一个问题。 – corsiKa 2011-04-03 17:17:02

+0

我明白你说的是什么,但是现在数组非常小,所以它不是很明显,但我想确保代码在数组数量(和大小)增加时保持可伸缩性。 – Aleadam 2011-04-03 18:30:44

回答

9

对不起,我发布了一个自己的问题的答案,但现在,因为没有现成的快速解决方案,我正在实现我自己的静态随机播放功能,基于这篇文章的代码:Random shuffling of an array 。仍然期待听到最好的实施。这是我做过什么:

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

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

rnd.setSeed(System.currentTimeMillis()); 

,这样的结果是唯一的各一次。

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