通常、私たちは以下の方法で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]