Как написать идеальный метод перемешивания на Java: примеры и реализации

Чтобы написать идеальный метод перемешивания на Java, вы можете использовать алгоритм Фишера-Йейтса. Этот алгоритм перемешивает массив или список, перебирая элементы и заменяя каждый элемент случайным элементом, который идет после него. Вот пример реализации:

import java.util.Random;
public class ShuffleMethod {
    public static void shuffleArray(Object[] array) {
        Random random = new Random();
        for (int i = array.length - 1; i > 0; i--) {
            int j = random.nextInt(i + 1);
            Object temp = array[i];
            array[i] = array[j];
            array[j] = temp;
        }
    }
    public static void main(String[] args) {
        Integer[] numbers = {1, 2, 3, 4, 5};
        shuffleArray(numbers);
        for (Integer number : numbers) {
            System.out.print(number + " ");
        }
    }
}

В этом примере метод shuffleArrayпринимает массив объектов и перемешивает их. Он использует класс Randomдля генерации случайных индексов для замены элементов.

Вот несколько дополнительных методов перетасовки элементов в Java:

  1. Использование метода Collections.shuffle:

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;
    public class ShuffleMethod {
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);
        Collections.shuffle(numbers);
        for (Integer number : numbers) {
            System.out.print(number + " ");
        }
    }
    }
  2. Перетасовка элементов с использованием специального алгоритма:

    import java.util.ArrayList;
    import java.util.List;
    import java.util.Random;
    public class ShuffleMethod {
    public static <T> void shuffleList(List<T> list) {
        Random random = new Random();
        for (int i = list.size() - 1; i > 0; i--) {
            int j = random.nextInt(i + 1);
            T temp = list.get(i);
            list.set(i, list.get(j));
            list.set(j, temp);
        }
    }
    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);
        shuffleList(numbers);
        for (Integer number : numbers) {
            System.out.print(number + " ");
        }
    }
    }