開発者ドキュメント

Java:リストからランダムな項目を返す


java-random-number、width = 200、height = 200

通常、私たちは以下の方法でJavaで乱数を生成しています。

…​.//Generate number between 0-9
int index = ThreadLocalRandom.current().nextInt(10);

**  2。ランダム()**

....//Generate number between 0-9
Random random = new Random();
int index = random.nextInt(10);
  • 3。 Math.random()**

…​.//Generate number between 0-9
int index = (int)(Math.random()** 10);

** 注意**

{空} 1。シングルスレッドの場合、パフォーマンスの差はあまりありません。必要なものを選んでください。

{空} 2。複数のスレッドの場合は、 `ThreadLocalRandom`を使うことをお勧めします。ランダムはスレッドセーフですが、複数のスレッドが同じRandomのインスタンスを使用する場合、複数のスレッドが同じ「ランダム」ジェネレータメソッドにアクセスし続けるために競合が発生し、パフォーマンスが低下します。 ThreadLocalRandomこれは、スレッドごとにランダムインスタンスを生成することで解決します。

このhttp://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ThreadLocalRandom.html[ThreadLocalRandom JavaDoc]を参照してください。

このチュートリアルでは、上記のメソッドを使用してリストからランダムな項目を取得する方法を示します。

===  1. ThreadLocalRandom

ArrayListからランダムな項目を取得するための `ThreadLocalRandom`の例です。

ThreadLocalRandomExample.java

package com.mkyong;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ThreadLocalRandom;

public class ThreadLocalRandomExample {

public static void main(String[]args) {
List<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(50);
ThreadLocalRandomExample obj = new ThreadLocalRandomExample();
for(int i = 0; i < 10; i++){
    System.out.println(obj.getRandomList(list));
}
}
public int getRandomList(List<Integer> list) {
//0-4
 int index = ThreadLocalRandom.current().nextInt(list.size());
 System.out.println("\nIndex :" + index );
 return list.get(index);
}

}

出力。結果は、プログラムが実行されるたびに異なります。

Index :2
30

Index :4
50

Index :4
50

Index :3
40

Index :4
50

Index :0
10

Index :2
30

Index :1
20

Index :2
30

Index :4
50

===  2. Ramdom()

ArrayListからランダムな項目を取得するための `Random`の例です。

RandomExample.java

package com.mkyong;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class RandomExample {

private Random random = new Random();
public static void main(String[]args) {
List<String> list = new ArrayList<String>();
list.add("Apple");
list.add("Boy");
list.add("Cat");
list.add("Dog");
list.add("Elephant");
RandomExample obj = new RandomExample();
for(int i = 0; i < 10; i++){
    System.out.println(obj.getRandomList(list));
}
}
public String getRandomList(List<String> list) {
//0-4
 int index = random.nextInt(list.size());
 System.out.println("\nIndex :" + index );
 return list.get(index);
}

}

出力

Index :3
Dog

Index :1
Boy

Index :2
Cat

Index :2
Cat

Index :4
Elephant

Index :1
Boy

Index :2
Cat

Index :0
Apple

Index :0
Apple

Index :3
Dog

===  3. Math.random()

`Math.random()`の例では、ArrayListからランダムな項目を取得します。

MathRandomExample.java

package com.mkyong;

import java.util.ArrayList;
import java.util.List;

public class MathRandomExample {

public static void main(String[]args) {
List<Integer> list = new ArrayList<Integer>();
list.add(10);
list.add(20);
list.add(30);
list.add(40);
list.add(50);
MathRandomExample obj = new MathRandomExample();
for(int i = 0; i < 10; i++){
    System.out.println(obj.getRandomList(list));
}
}
public int getRandomList(List<Integer> list) {
//Math.random() = greater than or equal to 0.0 and less than 1
    //0-4
 int index = (int)(Math.random()** list.size());
 System.out.println("\nIndex :" + index );
 return list.get(index);
}

}

=== 参考文献

.  http://java.dzone.com/articles/concurrent-random-java-se-7[Concurrent

Java SE 7のランダム版]。 http://www.reddit.com/r/java/comments/108wia/avoid__random__use__new__threadlocalrandom__from__java7/[Reddit

: Avoid Random. Use new ThreadLocalRandom from Java7]. http://www.java-gaming.org/index.php?topic=27412.0[Using

乱数生成のためのThreadLocalRandom]
モバイルバージョンを終了