Java - ArrayListからランダムに要素を取得する

リストからランダムに要素を取得する方法を紹介します。

1. Random.nextInt() にランダム要素を取得する

Random.nextInt(bound) は bound 未満の正数を返します。 boundは含まれません。

以下のようにリスト長を nextInt() の引数に渡して、ランダム Index を計算してリストから取得できます。

import java.util.Arrays;
import java.util.List;
import java.util.Random;

public class Example {

    public static void main(String[] args) {

        List<String> myList = Arrays.asList("Hello", "World", "Java", "Python", "Kotlin", "C++");

        Random random = new Random();
        int randomIndex = random.nextInt(myList.size());
        System.out.println(myList.get(randomIndex));

        randomIndex = random.nextInt(myList.size());
        System.out.println(myList.get(randomIndex));

        randomIndex = random.nextInt(myList.size());
        System.out.println(myList.get(randomIndex));
    }
}

Output:

World
Hello
Kotlin

2. Collections.shuffle() でリストの順序を変更してランダム要素を取得する

Collections.shuffle() は引数に渡されたリストの順序をランダムに変更します。順序が変更されたため、Index 0からインポートすると、ランダムな要素をインポートできます。

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> myList = Arrays.asList("Hello", "World", "Java", "Python", "Kotlin", "C++");

        Collections.shuffle(myList);

        System.out.println(myList);
    }
}

Output:

[Kotlin, Java, World, Python, Hello, C++]

2.1 リストの順序は変更せずにランダム要素を取得する

Collections.shuffle() は既存のリストの順序を変更しますが、既存のリストの順序を変更したくない場合は、以下のようにリストをコピーし、コピーされたリストに対して shuffle() を実行しなければなりません。

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Example {

    public static void main(String[] args) {

        List<String> myList = Arrays.asList("Hello", "World", "Java", "Python", "Kotlin", "C++");

        List<String> copy = new ArrayList<>(myList);
        Collections.shuffle(copy);

        System.out.println("myList: " + myList);
        System.out.println("copy: " + copy);
    }
}

Output:

myList: [Hello, World, Java, Python, Kotlin, C++]
copy: [Kotlin, World, Hello, C++, Python, Java]
codechachaCopyright ©2019 codechacha