2014-11-10 3 views
0

두 개의 큰 문자열 배열을 병합하여 전체적으로 정렬해야합니다. 특정 방법이 있습니까 등 두 개의 큰 문자열 배열 병합

List list = new ArrayList(Arrays.asList(a)); 
list.addAll(Arrays.asList(b)); 

으로 배열 목록을 사용하여

  • 을 반복

    1. : 나는 보았다 기준으로

      는 방법 다음은 안드로이드에서 문자열을 처리하는 것이 Java 라이브러리 유틸리티보다 효율적입니다.

      어느 누구도이 작업을 효과적으로 수행 할 수있는 방법을 제안 할 수 있습니까?

      참고 : 배열은 귀하의 경우 요소 각

  • +0

    이것은 도움이 될 수 있습니다. http://stackoverflow.com/questions/80476/how-to-concatenate-two-arrays-in-java –

    +2

    두 번째 접근 방식의 문제점은 무엇입니까? – Lrrr

    +0

    @AliAmiri 그러나 배열 목록은 기본 배열 주위의 래퍼이며 여전히 원치 않는 메모리 레이아웃입니다. – nmxprime

    답변

    0

    더 나은 사용하는 배열을 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)을 갖습니다.