Javaの文字列で、先頭が一致しているのかを調べるのにかかる時間は、startsWithとsubstring.equalsでは、どちらが速いのか実験してみました。
おまけで、charAtでも比較してみました。
・実行環境
OS : Windows XP Pro SP3
CPU : Intel Core 2 Duo E8400(GIGABYTEのDES Advanced有効)
Java : JDK6u15
文字列の比較結果がtrueになる場合
実験ソース:StringTest.java
比較する文字列は、比較される文字列の先頭から切り出した10文字です。
B = A.substring(0,10);
それぞれ、20回実行したときの平均です(forで20回、回しています)。
・結果 平均(合計)(単位は、ms)
比較回数 | startsWith | substring.equals | charAt |
---|---|---|---|
10回 | 0.0(0) | 0.0(0) | 0.0(0) |
1,000回 | 0.0(0) | 0.0(0) | 0.0(0) |
100,000回 | 3.9(78) | 5.45(109) | 7.05(141) |
1,000,000回 | 27.35(547) | 39.85(797) | 48.45(969) |
10,000,000回 | 252.35(5047) | 383.6(7672) | 473.45(9469) |
100,000,000回 | 2507.05(50141) | 3816.4(76328) | 4708.6(94172) |
・結論
startsWithの方がsubstring.equalsよりも1.5倍速い。
文字列の比較結果がtrueにならない場合
実験ソース:StringTest2.java
比較する文字列は、比較される文字列の先頭から10文字分後から切り出した10文字です。
B = A.substring(10,20);
それぞれ、20回実行したときの平均です(forで20回、回しています)。
・結果 平均(合計)(単位は、ms)
比較回数 | startsWith | substring.equals | charAt |
---|---|---|---|
10回 | 0.0(0) | 0.0(0) | 0.0(0) |
1,000回 | 0.0(0) | 0.0(0) | 0.0(0) |
100,000回 | 1.55(31) | 3.15(63) | 0.8(16) |
1,000,000回 | 9.35(187) | 21.9(438) | 6.25(125) |
10,000,000回 | 74.2(1484) | 189.1(3782) | 48.45(969) |
100,000,000回 | 727.35(14547) | 1872.65(37453) | 469.5(9390) |
・結論
startsWithの方がsubstring.equalsよりも2.5倍速い。
・総論
startsWithの方が速い!