> Java > java지도 시간 > 본문

항목 문자열 연결 성능에 주의하세요

DDD
풀어 주다: 2024-10-17 22:24:29
원래의
700명이 탐색했습니다.

1. 연산자( )를 사용한 문자열 연결:
연산자를 사용하여 문자열을 연결하면 몇 가지 연결에는 편리하지만 문자열의 불변성으로 인해 대규모 작업에서는 성능 문제가 발생합니다.
새 문자열이 생성될 때마다 이전 문자열의 내용이 모두 복사되므로 대규모 연결의 경우 2차 시간이 발생합니다.

잘못된 예( 와 반복적으로 연결):

public String criaFatura(List<Item> itens) {
    String fatura = "";
    for (Item item : itens) {
        fatura += item.toString();  // ineficiente para grandes listas
    }
    return fatura;
}

로그인 후 복사

2. StringBuilder를 사용하여 성능 향상:
를 사용하는 대신 문자열을 효율적으로 수정하고 필요에 따라 메모리를 동적으로 할당할 수 있는 StringBuilder를 사용하세요.
StringBuilder를 사용한 연결 시간은 선형이므로 성능이 크게 향상됩니다.

올바른 예(StringBuilder 사용):

public String criaFatura(List<Item> itens) {
    StringBuilder fatura = new StringBuilder(itens.size() * 80);  // pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

로그인 후 복사

3. 성능 비교:
연산자를 최적화하기 위해 Java 6이 개선된 후에도 StringBuilder를 사용하는 것이 계속해서 더 효율적입니다. 테스트 머신에서 StringBuilder를 사용하는 것은 100개 항목이 있는 시나리오에서 연산자보다 6.5배 더 빨랐습니다.

사전 할당이 없는 최적화의 예:

public String criaFatura(List<Item> itens) {
    StringBuilder fatura = new StringBuilder();  // sem pré-alocação
    for (Item item : itens) {
        fatura.append(item.toString());
    }
    return fatura.toString();
}

로그인 후 복사

4. 이야기의 교훈:
많은 문자열을 연결하는 데 사용하지 마십시오. 연결 수가 늘어나면 성능이 금새 감당할 수 없을 정도로 커집니다.
대량 연결을 위해서는 StringBuilder.append 또는 문자 배열과 같은 대안을 사용하세요.

5. 다른 대안:
StringBuilder 외에도, 특히 성능을 더 세밀하게 제어해야 하는 경우 대규모 처리를 위해 또는 문자열을 보다 효율적으로 결합하기 위해 문자 배열을 사용하는 것을 고려할 수 있습니다.

결론:
StringBuilder를 사용하여 문자열을 효율적으로 연결하세요.
연결 수가 증가하면 성능이 크게 저하되므로 루프나 대량의 문자열에 연산자를 사용하지 마십시오.

책의 예:

Item  Cuidado com o desempenho da concatenação de string

Item  Cuidado com o desempenho da concatenação de string

위 내용은 항목 문자열 연결 성능에 주의하세요의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿