하루가 끝날 무렵, 일부 메모리 위치 A에서 다른 메모리 위치 B로 N 개의 참조를 이동합니다. 그러나 나는 확신합니다. System.arraycopy
에서 수행하면 StringBuffer
에서 성능이 향상됩니다. 그러나, 그것은 당신이 append
또는 insert
일 경우에 달려 있습니다.
ArrayList
은 add
을 수행 할 수있는 두 가지 방법이 있습니다. 하나의 개체를 사용하거나 특정 인덱스 스폿의 요소를 아래로 이동하는 것입니다. 둘 다 다른 공연을합니다.
이 문제를 해결하려면 StringBuffer
(System.arraycopy()
)으로 전화하십시오. 이 구현은 실제로 JVM에 종속적인데 (기본 호출 임), 이 매우 빠름이라는 가능성이 있습니다. 그 외에도 매우 큰 대용량 연속되지 않는 메모리 영역을 제외하고는 StringBuffer.append()
의 성능을 실제로 느리게 할 수있는 것은별로 없습니다.
ArrayList.add(E element)
은 amoritized O (1) 시간이 걸리지 만 더 많은 요소가 들어갈 수 있도록 backing array를 늘려야 할 가능성 때문에 O (N)으로 바뀔 수 있습니다. 그래도 삽입 할 필요가 없다면 삽입 시간은 O (1) (배열 끝에 요소를 추가하는 순서)입니다.
ArrayList.add(int index, E element)
가능성 O (1) 가장 좋은 경우 만, O - 인한 그것의
E
배치 아래로 이동하는 원소의 양에 평균 최악의 경우 (N 인덱스)
. 이 배열을 복사 않으므로
내가 사용하는 방법에 따라, 다음 생각, 당신은 amoritized 한 성능을 . 성능이 어떠 할지를 말하기 위해 수행중인 작업을 확인해야합니다.
'상각 작업'이란 무엇입니까? – Axel
@Axel : [도움을 드리겠습니다.] (http://en.wikipedia.org/wiki/Amortized_analysis) – Makoto