[Java]Map(マップ)の要素をランダムに取得するには?

Java

どうも、ちょげ(@chogetarou)です。

Map(マップ)の要素をランダムに取得する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

Map(マップ)の要素をランダムに取得する方法は、3つあります。

キーをランダムに取得

ひとつめは、キーをランダムに取得する方法です。

まず、Randomをインポートします。
(「java.util.*」をインポートしている場合は必要なし)

import java.util.Random;

Mapのキーをリストもしくは配列に変換します。

次に、Randomのインスタンスを生成し、インスタンスからnextInt()を呼び出します。

nextInt()の引数に変換したリストもしくは配列の要素数を指定します。

そして、キーを変換したリストもしくは配列のnextInt()の戻り値のインデックスにアクセスします。

//map=対象のマップ, T=マップのキーの型
List<T> list = new ArrayList<T>(map.keySet());
int index = new Random().nextInt(list.size());
T result = list.get(index);

上記のインデックスにアクセスすることで、Map(マップ)のキー(key)をランダムに取得できます。

使用例

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        Map<String, Integer> numbers = new HashMap<String, Integer>();
        numbers.put("one", 1);
        numbers.put("two", 2);
        numbers.put("three", 3);
        numbers.put("four", 4);
        numbers.put("five", 5);
        
        List<String> list = new ArrayList<String>(numbers.keySet());
        int index = new Random().nextInt(list.size());
        String result = list.get(index);
        
        System.out.println(result);
    }
}

値をランダムに取得

ふたつめは、値をランダムに取得する方法です。

まず、Randomをインポートします。
(「java.util.*」をインポートしている場合は必要なし)

import java.util.Random;

Mapの値をリストもしくは配列に変換します。

次に、Randomのインスタンスを生成し、インスタンスからnextInt()を呼び出します。

nextInt()の引数に変換したリストもしくは配列の要素数を指定します。

そして、値を変換したリストもしくは配列のnextInt()の戻り値のインデックスにアクセスします。

//map=対象のマップ, T=マップの値の型
List<T> list = new ArrayList<T>(map.values());
int index = new Random().nextInt(list.size());
T result = list.get(index);

上記のインデックスにアクセスすることで、Map(マップ)の値(value)をランダムに取得できます。

使用例

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        Map<String, Integer> numbers = new HashMap<String, Integer>();
        numbers.put("one", 1);
        numbers.put("two", 2);
        numbers.put("three", 3);
        numbers.put("four", 4);
        numbers.put("five", 5);
        
        List<Integer> list = new ArrayList<Integer>(numbers.values());
        int index = new Random().nextInt(list.size());
        Integer result = list.get(index);
        
        System.out.println(result);
    }
}

キーと値のペアをランダムに取得

みっつめは、キーと値のペアをランダムに取得する方法です。

まず、Randomをインポートします。
(「java.util.*」をインポートしている場合は必要なし)

import java.util.Random;

Mapのキーと値のペアをentrySet()でリストもしくは配列に変換します。

次に、Randomのインスタンスを生成し、インスタンスからnextInt()を呼び出します。

nextInt()の引数に変換したリストもしくは配列の要素数を指定します。

そして、キーと値のペアを変換したリストもしくは配列のnextInt()の戻り値のインデックスにアクセスします。

//map=対象のマップ
List<Map.Entry> list = new ArrayList<Map.Entry>(map.entrySet());
int index = new Random().nextInt(list.size());
Map.Entry result = list.get(index);

上記のインデックスにアクセスすることで、Map(マップ)のキーと値のペアをランダムに取得できます。

使用例

import java.util.*;

public class Main {
    public static void main(String[] args) throws Exception {
        
        Map<String, Integer> numbers = new HashMap<String, Integer>();
        numbers.put("one", 1);
        numbers.put("two", 2);
        numbers.put("three", 3);
        numbers.put("four", 4);
        numbers.put("five", 5);
        
        List<Map.Entry> list = new ArrayList<Map.Entry>(numbers.entrySet());
        int index = new Random().nextInt(list.size());
        Map.Entry result = list.get(index);
        
        System.out.println(result);
    }
}

まとめ

Map(マップ)の要素をランダムに取得する方法は、次の3つです。

  • キーをランダムに取得する方法
    List<T> list = new ArrayList<T>(map.keySet());
    int index = new Random().nextInt(list.size());
    T result = list.get(index);
  • 値をランダムに取得する方法
    List<T> list = new ArrayList<T>(map.values());
    int index = new Random().nextInt(list.size());
    T result = list.get(index);
  • キーと値のペアをランダムに取得する方法
    List<Map.Entry> list = new ArrayList<Map.Entry>(map.entrySet());
    int index = new Random().nextInt(list.size());
    Map.Entry result = list.get(index);

コメント

タイトルとURLをコピーしました