String, StringBuffer, StringBuilder

Zio0708·2021년 3월 12일
0

String, StringBuffer, StringBuilder

-문제 코드

내용은 맞지만 시간 초과가 발생하였다.

public String convert2(String s, int nRows) {
        char[] c = s.toCharArray();
        int len = c.length;
        String[] sb = new String[nRows];
        for (int i = 0; i < sb.length; i++) sb[i] = new StringBuffer();

        int i = 0;
        while (i < len) {
            for (int idx = 0; idx < nRows && i < len; idx++) // vertically down
                sb[idx] += (c[i++]);
            for (int idx = nRows-2; idx >= 1 && i < len; idx--) // obliquely up
                sb[idx] += (c[i++]);
        }
        for (int idx = 1; idx < sb.length; idx++)
            sb[0].append(sb[idx]);
        return sb[0].toString();
    }//문제 : char를 써서 다이어트좀 하자 , Stringbuffer도 괜찮다
    //append도 적극적으로 활용해보자

-해결

String 은 불변 속성을 가지기 때문에 StringBuffer를 쓰자.

Sb라는 String 배열에 계속 단어를 더하는 방식으로 코드를 작성하였는데
이런 경우에 동작 시간이 늘어나게 된다.

작은 연산일때는 안 보이는데, String 값에 단어를 덧붙이는 것이 아니라
사실은 새로운 메모리 영역을 가르키게 되는것이라 연산이 늘어날 수록 차이가 보인다.

String은 변경이 별로 없는 경우에 사용해 주면 좋다.

StringBuffer는 가변성을 지니기 때문에 객체의 문자열을 바꿀 수 있다.

그런데 StringBuffer하고 Builder에는 차이가 있다.
StringBuffer는 동기화 키워드를 지원하여 멀티쓰레드에서 안전하고
StringBuilder은 동기화를 고려하지 않는 대신 단일쓰레드에서 더 잘 작동한다.

동기화를 지원하는 것과 쓰레드, Thread-safe.

0개의 댓글