문자열 을 맞 추 는 효율 적 인 문제 (String, StringBuffer, StringBuilder 대비)

원본 링크:http://www.cnblogs.com/shiguangmanbu2016/p/5932896.html
문자열 을 맞 추 면 대략 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

좋은 웹페이지 즐겨찾기