문자열 을 맞 추 는 효율 적 인 문제 (String, StringBuffer, StringBuilder 대비)
문자열 을 맞 추 면 대략 3 개의 class 가 사용 할 수 있 습 니 다. 그들 은 String, StringBuffer, StringBuilder 입 니 다.그 중에서 StringBuilder 는 1.5 에서 StringBuffer 를 대체 합 니 다.
각각의 연결 효율 을 검사 하 는 코드 는 다음 과 같다.
[java]
public class test {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
long n = 30000;
System.out.println("Start... "+n);
long start1 = System.currentTimeMillis();
String s1 = new String("hello");
for (long i = 0; i < n; i++)
{
s1+=" ";
}
long end1 = System.currentTimeMillis();
long time1 = end1 -start1;
System.out.println(" String+= "+time1);
long start2 = System.currentTimeMillis();
String s2 = new String("hello");
for (long i = 0; i < n; i++)
{
s2=s2+" ";
}
long end2 = System.currentTimeMillis();
long time2 = end2 -start2;
System.out.println(" String=String+ "+time2);
long start3 = System.currentTimeMillis();
String s3 = new String("hello");
for (long i = 0; i < n; i++)
{
s3=s3.concat(" ");
}
long end3 = System.currentTimeMillis();
long time3 = end3 -start3;
System.out.println(" String.concat "+time3);
long start4 = System.currentTimeMillis();
StringBuffer s4 = new StringBuffer("hello");
for (long i = 0; i < n; i++)
{
s4.append(" ");
}
long end4 = System.currentTimeMillis();
long time4 = end4 -start4;
System.out.println(" StringBuffer.append "+time4);
long start5 = System.currentTimeMillis();
StringBuilder s5 = new StringBuilder("hello");
for (long i = 0; i < n; i++)
{
s5.append(" ");
}
long end5 = System.currentTimeMillis();
long time5 = end5 -start5;
System.out.println(" StringBuilder.append "+time5);
System.out.println("End...");
}
}
검 측 데 이 터 는 다음 과 같 습 니 다 (기계 성능 차 이 를 고려 하지 않 음).
Start... 30000 문자열 을 String + = 로 맞 추 는 시간 27468 문자열 을 String = String + 로 맞 추 는 시간 25813 문자열 을 String. concat 로 맞 추 는 시간 12265 문자열 을 StringBuffer. append 로 맞 추 는 시간 14 문자열 을 StringBuilder. append 로 맞 추 는 시간 8 End...
요약:
1. String 클래스 자체 가 final 형식 입 니 다. 문자열 을 연결 할 때 StringBuffer 를 사용 하고 append 를 호출 한 다음 에 toString 방법 을 호출 합 니 다.스 트 링 버 퍼 가 스 트 링 으로 바 뀌 었 을 때 비용 이 상당히 많이 든다.중간 중간 임시 대상 인 스 트 링 버 퍼 는 물론 매번 끝나 면 스 트 링 으로 전환 해 야 한다.
2. 문자열 연결 을 할 때 String 류 의 concat 방법 은 + 번호 보다 좋 습 니 다.(String + =) 는 (String = String +) 과 비슷 합 니 다.
3. StringBuilder 의 등장 은 StringBuffer 를 교체 하 는 데 사 용 됩 니 다. 단일 스 레 드 의 경우 효율 이 StringBuffer 보다 높 지만 다 중 스 레 드 프로 그래 밍 에 적합 하지 않 습 니 다.그런 점 에서 StringBuilder 는 단일 스 레 드 프로 그래 밍 상황 에서 StringBuffer 보다 우선 해 야 합 니 다.다 중 스 레 드 프로 그래 밍 을 할 때 StringBuffer 를 사용 해 야 합 니 다. StringBuilder 를 사용 하 는 것 은 좋 지 않 습 니 다. StringBuffer 는 스 레 드 가 안전 하기 때 문 입 니 다.
4. 단일 스 레 드 상황 에서 문자열 연결 을 하고 StringBuilder. append 는 StringBuffer. append 와 효율 이 비슷 합 니 다.
다음으로 전송:https://www.cnblogs.com/shiguangmanbu2016/p/5932896.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.