Какой будет лучший способ сделать это? Прямо сейчас я преобразую свой JSONArray в ArrayList пользовательского класса, использую Collections.shuffle() для выполнения действия и преобразую обратно в JSONArray, что, похоже, слишком много накладных расходов.
JSONArray
ArrayList
Collections.shuffle()
Ответ может быть просто для реализации Фишер-Йейтс перетасовывает для этого, но я предполагаю, что это, возможно, уже сделано, поэтому я хотел бы избежать повторного изобретения колеса. Я посмотрел на стандартные JSON api и Google's Gson , но, похоже, они не имеют никакой реализации.
В этом вопросе также есть простые опции для стандартного массива , который можно легко перенести на java, но я бы с удовольствием выслушал ваш вклад. Я поражен, что запрос http://www.google.com/search?q=java+shuffle+jsonarray не затопил меня методами.
Извините за публикацию ответа на мой собственный вопрос, но сейчас, так как не было готового быстрого решения, я реализую свою собственную статическую функцию перемешивания на основе кода из этого поста: Случайное перемешивание массива .Все еще с нетерпением жду, чтобы услышать о лучшей реализации.Вот что я сделал:
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; }
Ваш метод отлично работает, но не забудьте:
rnd.setSeed(System.currentTimeMillis());
, чтобы результаты каждый раз были уникальными.
Извините за новый ответ, мне не хватает представителя, чтобы оставить комментарий: /
Используйте библиотеку JSON, которая не требует преобразования в какую-либо структуру данных JSON, когда в язык уже встроены совершенно хорошие интерфейсы List и Map.
List
Map
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 например.