2011-04-03 56 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()); 

,這樣的結果是唯一的各一次。

對不起了新的答案,我沒有足夠的代表處發表評論:/