[String형 vs StringBuilder] 문자열 조합에서 처리 속도가 다릅니다.

개시하다


Java로 문자열 연결을 할 때 String형+=으로 연결하거나 StringBuilderappend()로 연결하는 두 가지 방법이 있다.
결과는 모두 같지만 처리 속도에 차이가 있을 수 있다.

스트링 할 때.


예를 들면 이런 코드.
String stringResult = null;
    // Stringオブジェクトによる文字列結合
    for (int i = 0; i < 10; i++) {
      String str = Integer.toString(i);
      stringResult += str;
    }
스트링형은 스트링 대상이기 때문에 스트링형 변수가 선포된다 = 스트링 대상이 탄생한다.
따라서 문자열이 결합된 시간stringResult += str;에 String 객체가 생성됩니다.
즉, String 대상은 for 문장의 순환 횟수만 생성한다.

StringBuilder에서 할 때.


예를 들면 이런 코드.
StringBuilder sb = new StringBuilder();
    // StringBuilderによる文字列結合
    for (int j = 0; j < 10; j++) {
      sb.append(Integer.toString(j));
    }
결과는 String의 예와 같습니다.
그러나 String 객체는 append()에 작성되지 않습니다.끝까지 추가할 거예요.
String 객체가 생성된 양이 없으므로 처리 속도가 빠릅니다.

속도가 얼마나 달라요?


다음 절차에 따라 String과 StringBuilder 처리 시간의 차이를 측정합니다.
public class StringBuilderSample{
  public static void main(String[] args) {
    final int MAX_COUNT = 100;
    System.out.println("結合回数:" + MAX_COUNT + "回のとき");
    /********************* String型の場合 *********************/
    String stringResult = null;

    // Stringでの処理にかかった時間
    long sTime;

    // 開始時間
    long startTime = System.nanoTime();

    // String型による文字列結合
    for (int i = 0; i < MAX_COUNT; i++) {
      String str = Integer.toString(i);
      stringResult += str;
    }

    // 終了時間
    long endTime = System.nanoTime();

    // 処理にかかった時間を算出
    sTime = endTime - startTime;

    System.out.println("Stringでの処理時間:" + sTime + "ナノ秒");

    /********************* StringBuilderの場合 *********************/
    StringBuilder sb = new StringBuilder();

    // StringBuilderでの処理にかかった時間
    long sbTime;

    // 開始時間
    startTime = System.nanoTime();

    // StringBuilderによる文字列結合
    for (int j = 0; j < MAX_COUNT; j++) {
      sb.append(Integer.toString(j));
    }

    // 終了時間
    endTime = System.nanoTime();

    // 処理にかかった時間を算出
    sbTime = endTime - startTime;

    System.out.println("StringBuilderでの処理時間:" + sbTime + "ナノ秒");
    System.out.println("StringBuilderの方が " + (sTime - sbTime) + " ナノ秒速い");
  }
}
문자열 병합 MAX_COUNT 횟수의 처리 속도를 표시하는 프로그램입니다.
다음은 MAX_COUNT의 값을 1001000, 1만, 10만으로 늘리면서 처리 시간의 차이를 살펴본다.
그나저나 나초는 10^(-9)초(=0.0억1초)다.

100회 실행 시



1000회 실행 시



1만 회 실행 시



약 0.57초 빠르다

10만 회 실행 시



빠르다

StringBuilder가 더 빠릅니다!


1000회 정도면 많게는 마이크로초(10^(-6) 단위여서 크게 신경 쓰지 않는다.
1만 건이 넘으면 처리 시간의 차이를 의식하게 된다.
스트링블러더를 몇 번 실행하든 빠르기 때문에 특별한 이유가 없다면 문자열 조합은 스트링블러더를 사용하는 것이 좋다.
201807/21 추기: 속편→[java] appeend에서 "+"를 사용하지 않습니다!

좋은 웹페이지 즐겨찾기