RTrim最速っぽいのを簡単に調べてみた
自宅の環境(CPU:Core2 Duo E6750 メモリ4G)ではStringUtils#stripEnd
が最速らしい。
しかし、会社のPCではguavaが最速でした。
検証したのは、
- 処理時に(メソッド呼ばれる毎に)で毎回Patternのインスタンス生成からやる
- Patternの変数をstaticで持たせてインスタンス生成のコストを減らしたもの
- StringUtils#stripEnd
- CharMatcher#trimTrailingFrom
のどれが一番早いか!です。
結果はこちら。
検証コード
package speedcheck; import com.google.common.base.CharMatcher; import org.apache.commons.lang.StringUtils; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * * @author yushi.koga */ public class SpeedCheck { static Pattern staticPatternForRtrim = Pattern.compile("\\s+$"); /** * @param args the command line arguments */ public static void main(String[] args) { String sampleText = "\"aaaaaa\" "; int max = 25000000; String staticTrimedText = null; System.out.println("original text start from here ->" + "\"aaaaaa\" " + "<-to end is here"); System.out.println("loop times : " + max); System.out.println("======================================="); long staticStarted = System.currentTimeMillis(); for (int i = 0; i < max; i++) { Matcher staticMatcher = staticPatternForRtrim.matcher(sampleText); staticTrimedText = staticMatcher.replaceAll(""); } long staticFinished = System.currentTimeMillis(); System.out.println("staticStarted at " + staticStarted); System.out.println("staticfinished at " + staticFinished); System.out.println("staticPassed time is " + ((staticFinished - staticStarted))); System.out.println("staticTrimedText is " + staticTrimedText + "<- end here"); System.out.println("======================================="); String insideTrimedText = null; long insideStarted = System.currentTimeMillis(); for (int i = 0; i < max; i++) { insideTrimedText = Pattern.compile("\\s+$").matcher(sampleText).replaceAll(""); } long insideFinished = System.currentTimeMillis(); System.out.println("insideStarted at " + insideStarted); System.out.println("insidefinished at " + insideFinished); System.out.println("insidePassed time is " + ((insideFinished - insideStarted))); System.out.println("insideTrimedText is " + insideTrimedText + "<- end here"); System.out.println("======================================="); String commonsTrimedText = null; long commonsStarted = System.currentTimeMillis(); for (int i = 0; i < max; i++) { commonsTrimedText = StringUtils.stripEnd(sampleText," "); } long commonsFinished = System.currentTimeMillis(); System.out.println("commonsStarted at " + commonsStarted); System.out.println("commonsFinished at " + commonsFinished); System.out.println("commonsPassed time is " + ((commonsFinished - commonsStarted))); System.out.println("commonsTrimedText is " + commonsTrimedText + "<- end here"); System.out.println("======================================="); String charMatcherTrimedText = null; long charMatcherStarted = System.currentTimeMillis(); for (int i = 0; i < max; i++) { charMatcherTrimedText = CharMatcher.is(' ').trimTrailingFrom(sampleText); } long charMatcherFinished = System.currentTimeMillis(); System.out.println("quavaStarted at " + charMatcherStarted); System.out.println("quavaFinished at " + charMatcherFinished); System.out.println("quavaPassed time is " + ((charMatcherFinished - charMatcherStarted))); System.out.println("quavaTrimedText is " + charMatcherTrimedText + "<- end here"); System.out.println("======================================="); } }
結果
Executing: gradle :run Arguments: [-PmainClass=speedcheck.SpeedCheck, -c, D:\workspaceForNetBeans\speedcheck\settings.gradle] :compileJava UP-TO-DATE :processResources UP-TO-DATE :classes UP-TO-DATE :run original text start from here ->"aaaaaa" <-to end is here loop times : 25000000 ======================================= staticStarted at 1448538448194 staticfinished at 1448538458284 staticPassed time is 10090 staticTrimedText is "aaaaaa"<- end here ======================================= insideStarted at 1448538458285 insidefinished at 1448538479871 insidePassed time is 21586 insideTrimedText is "aaaaaa"<- end here ======================================= commonsStarted at 1448538479871 commonsFinished at 1448538480760 commonsPassed time is 889 commonsTrimedText is "aaaaaa"<- end here ======================================= quavaStarted at 1448538480760 quavaFinished at 1448538483150 quavaPassed time is 2390 quavaTrimedText is "aaaaaa"<- end here ======================================= BUILD SUCCESSFUL Total time: 35.862 secs