Эффективный способ перемешать массив JSON в Java? - PullRequest
3 голосов
/ 03 апреля 2011

Какой будет лучший способ сделать это? Прямо сейчас я преобразую свой JSONArray в ArrayList пользовательского класса, использую Collections.shuffle() для выполнения действия и преобразую обратно в JSONArray, что, похоже, слишком много накладных расходов.

Ответ может быть просто для реализации Фишер-Йейтс перетасовывает для этого, но я предполагаю, что это, возможно, уже сделано, поэтому я хотел бы избежать повторного изобретения колеса. Я посмотрел на стандартные JSON api и Google's Gson , но, похоже, они не имеют никакой реализации.

В этом вопросе также есть простые опции для стандартного массива , который можно легко перенести на java, но я бы с удовольствием выслушал ваш вклад. Я поражен, что запрос http://www.google.com/search?q=java+shuffle+jsonarray не затопил меня методами.

Ответы [ 3 ]

10 голосов
/ 03 апреля 2011

Извините за публикацию ответа на мой собственный вопрос, но сейчас, так как не было готового быстрого решения, я реализую свою собственную статическую функцию перемешивания на основе кода из этого поста: Случайное перемешивание массива .Все еще с нетерпением жду, чтобы услышать о лучшей реализации.Вот что я сделал:

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 голос
/ 26 июня 2014

Ваш метод отлично работает, но не забудьте:

rnd.setSeed(System.currentTimeMillis());

, чтобы результаты каждый раз были уникальными.

Извините за новый ответ, мне не хватает представителя, чтобы оставить комментарий: /

1 голос
/ 03 апреля 2011

Используйте библиотеку JSON, которая не требует преобразования в какую-либо структуру данных JSON, когда в язык уже встроены совершенно хорошие интерфейсы 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 например.

...