더 나은 사용하는 배열을 8K까지에 걸쳐. 또한 그것은 많은 기억을 취하지 않을 것입니다. 왜냐하면 당신은 현악기를 대처하지 않기 때문입니다. 이 경우 복잡도
String[] mergedArray = merge(a, b);
Arrays.sort(mergedArray);
를 정렬 (N + m) 병합 어레이 (N + m) * 로그 (N + m) O 될 것이다
public <T> T[] merge(T[] a, T[] b) {
int aLen = a.length;
int bLen = b.length;
T[] merged = (T[]) Array.newInstance(a.getClass().getComponentType(), aLen + bLen);
System.arraycopy(a, 0, merged, 0, aLen);
System.arraycopy(b, 0, merged, aLen, bLen);
return merged;
}
는 그런 다음 그것을 분류해야 .
목록 접근 방식에서는 ArrayList가 확장되고 배열에서 컬렉션으로 변환 될 때 약간의 오버 헤드가 발생합니다. 목록에 요소를 추가하기 위해 Arrays.asList (a) 및 O (n)에 O (n). 그런 다음 목록에 요소를 추가하기 위해 Arrays.asList (b)와 O (m)에 대해 O (m)를 지정하고 필요 용량 n + m에 목록을 확장하기 위해 O (m)을 갖습니다.
이것은 도움이 될 수 있습니다. http://stackoverflow.com/questions/80476/how-to-concatenate-two-arrays-in-java –
두 번째 접근 방식의 문제점은 무엇입니까? – Lrrr
@AliAmiri 그러나 배열 목록은 기본 배열 주위의 래퍼이며 여전히 원치 않는 메모리 레이아웃입니다. – nmxprime