nmtysh.log

Tech系のネタや日々の独り言などを書いています。

Java:文字列比較の実行速度の比較

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)

比較回数startsWithsubstring.equalscharAt
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)

比較回数startsWithsubstring.equalscharAt
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の方が速い!