59.ライブラリを知り、利用する
- ランダムな値を作るにおいて、下記の1番目のような実装では値の平均値がおかしくなる。ライブラリを使用することで正しくランダム値生成ができる。
package tryAny.effectiveJava;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
import org.apache.commons.lang3.time.StopWatch;
public class RandomTest {
public static void main(String[] args) {
int n = 2 * (Integer.MAX_VALUE / 3);
int low1 = 0;
StopWatch sw1 = new StopWatch();
sw1.start();
for (int i = 0; i < 1000000; i++) {
if (random(n) < n / 2) {
low1++;
}
}
sw1.stop();
System.out.println(low1); // 500000位になると思いきやならない。666666位になる。
System.out.println(sw1.getTime());
int low2 = 0;
StopWatch sw2 = new StopWatch();
sw2.start();
for (int i = 0; i < 1000000; i++) {
if (tlr.nextInt(n) < n / 2) {
low2++;
}
}
sw2.stop();
System.out.println(low2);// 500000位になる。
System.out.println(sw2.getTime());// 速度はあまり変わらない
}
static Random rnd = new Random();
static int random(int n) {
return Math.abs(rnd.nextInt()) % n;
}
static ThreadLocalRandom tlr = ThreadLocalRandom.current();
}
-
自分で処理を書くのではなく、ライブラリを使用することで得られる利点は以下の5つ。
-
エキスパートが練りに練った実装を使える。
-
時間を節約できる。
-
ライブラリ自体が進化していくので、恩恵にあずかれる。
-
ライブラリの機能がリリース事に増えるので、その恩恵にあずかれる。
-
標準的なライブラリを使うことで、自身のコードが主流に則ったものとなり、読みやすく、つかいやすいものとなる。
-
-
すべてのプログラマが、java.lang,java.util,java.ioとそれらのサブパッケージには親しくなっておくべき。