728x90
insert
StringBuilder의 insert메서드는 다시 AbstractStringBuilder의 insert메서드를 실행한다.
insert 메서드 내에서 직접 한 번, str.getChars() 메서드 안에서 한 번 호출되어 총 System.arraycopy() 메서드가 두 번 호출된다.
//AbstractStringBuilder.java 클래스
public AbstractStringBuilder insert(int offset, String str) {
if ((offset < 0) || (offset > length()))
throw new StringIndexOutOfBoundsException(offset);
if (str == null)
str = "null";
int len = str.length();
ensureCapacityInternal(count + len);
System.arraycopy(value, offset, value, offset + len, count - offset);
str.getChars(value, offset);
count += len;
return this;
}
//String.java클래스
void getChars(char dst[], int dstBegin) {
System.arraycopy(value, 0, dst, dstBegin, value.length);
}
append
StringBuilder의 append 메서드는 AbstractStringBuilder의 append를 실행하고, 그 메서드는 다음과 같다.
//AbstractStringBuilder.java 클래스
public AbstractStringBuilder append(String str) {
if (str == null)
return appendNull();
int len = str.length();
ensureCapacityInternal(count + len);
str.getChars(0, len, value, count);
count += len;
return this;
}
//String.java클래스
public void getChars(int srcBegin, int srcEnd, char dst[], int dstBegin) {
if (srcBegin < 0) {
throw new StringIndexOutOfBoundsException(srcBegin);
}
if (srcEnd > value.length) {
throw new StringIndexOutOfBoundsException(srcEnd);
}
if (srcBegin > srcEnd) {
throw new StringIndexOutOfBoundsException(srcEnd - srcBegin);
}
System.arraycopy(value, srcBegin, dst, dstBegin, srcEnd - srcBegin);
}
따라서, insert 메서드는 System.arraycopy를 두 번 사용하므로 System.arraycopy를 한 번만 사용하는 append 메서드보다 실행시간이 더 느리다.
'기록 > JAVA' 카테고리의 다른 글
[JAVA] 예외처리의 비용 (0) | 2022.04.30 |
---|---|
[JAVA] library, framework, pattern, architecture 차이 (0) | 2022.04.19 |
[JAVA] String.format 과정 (0) | 2022.04.08 |
[JAVA] 전위연산, 후위연산 메모리 및 속도 차이 (0) | 2022.03.14 |
[JAVA] StringBuilder의 append(), String의 + 연산자 속도차이 (0) | 2022.03.11 |
댓글