"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 항목 문자열 연결 성능에 주의하세요.

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

2024-11-08에 게시됨
검색:892

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

잘못된 예( 과의 반복 연결):

public String criaFatura(List 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 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 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

릴리스 선언문 이 기사는 https://dev.to/giselecoder/item-63-cuidado-com-o-desempenho-da-concatenacaode-string-2b67?1에서 복제됩니다.1 침해 내용이 있는 경우 [email protected]으로 문의하세요. 그것을 삭제하려면
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3