プログラミングガール

Developing a better me

文字列に同一の文字がないか点検する

メソッドの作成

引数に渡された文字列に同じ文字が含まれないかを調査するメソッドを作成。
今回は2通りのやり方で実装してみた。

① 2重ループを使用しての実装 (https://gist.github.com/914f60842b791725ebab)

② HashSetを利用し、1重ループでの実装 (https://gist.github.com/6ca661a977e53885f7d8)


メソッドの実行時間測定

どちらの方が効率がいいのか実際に時間を測定してみたいと思う。
”abcdefghijklmn””abcdefghiigklm”の2つの文字列を引数に渡し、どちらがより早く処理を終えるのか確認する。

UniqunessJudgement judge = new UniqunessJudgement(); 
UniqunessJudgement2 judge2 = new UniqunessJudgement2(); 

//多重ループを使用したメソッド(①)の実行時間測定
long start = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){
    judge.isUnique("abcdefghijklmn");
    judge.isUnique("abcdefghiigklm");
}   
long stop = System.currentTimeMillis();
System.out.println("2重ループによるメソッドの実行にかかった時間は " + (stop - start) + " ミリ秒です。");

//一重ループを使用したメソッド(②)の実行時間測定
long start2 = System.currentTimeMillis();
for(int i = 0; i < 10000; i++){
    judge2.isUnique("abcdefghijklmn");
    judge2.isUnique("abcdefghiigklm");
}
long stop2 = System.currentTimeMillis();
System.out.println("一重ループによるメソッドの実行にかかった時間は " + (stop2 - start2) + " ミリ秒です。");


実行結果

なんと、一重ループ(②)を使用したものの方が時間がかかってしまった...!

10回測定を行った平均
①のメソッド:18.9秒
②のメソッド:32.7秒

HashSetクラスの中身が非常に気になった今日このごろです。