2012-05-20 3 views
-1

가능한 중복 :
How to compare two arraylist?비교 두 ArrayLists

내가 다른 크기의 두 개의 문자열 ArrayLists 있습니다. 목록 A (큰 목록)에 목록 B (작은 목록)의 모든 값이 포함되어 있으면 true를 반환하는 메서드를 작성해야합니다. 그런 방법을 쓰려면 어떻게해야합니까? 감사합니다.

+1

숙제가 있습니까? 에서와 마찬가지로 API에서 무언가를 사용하는 대신 자신의 솔루션을 작성해야합니까? – Makoto

+0

두 개의 for 루프는 각 목록을 반복합니다. 그러나 매번 매치 할 때마다 (심지어 전체 목록을 확인하지 못했을 때도 마찬가지입니다.) 각 요소에 대해 체크 booleans를 설정하려고했지만 체크를 확인하는 방법을 찾을 수 없었습니다. –

+0

이것은입니다. 내 자신의 프로그램을 위해서. 숙제가 아님 –

답변

2

목록 대신 세트를 사용해야하는 것 같습니다. 목록에서이 작업을 수행하면 O(N^2)이되는 반면 HashSet 또는 TreeSet은 O(N) 또는 O(NlogN)이됩니다.

성능에 큰 문제가없는 경우 (목록이 비교적 작거나 자주 수행하지 않는 경우) 적절한 목록 개체에서 containsAll 메서드를 사용하면됩니다.

대안으로
0
  public boolean containsAll(List<String> listA, List<String> listB) { 
       Set<String> listAAsSet = new HashSet<String>(listA); 

       for (String string : listB) { 

        if(listAAsSet.contains(string)==false) { 
         return false; 
        } 
       } 
       return true; 
      } 

당신은 List.containsAll() :

0

아마 더 효율적인 방법이있어 사용하지만, 당신이 할 수있는 일은 작은을 통해 루프 큰 목록을 반복하고, 큰 목록의 모든 요소의 수 명부. 찾지 못하면 조그마한 목록에서 빠져 나온다. 찾지 못하면 거짓을 돌려 준다.

bool found = false; 

for (string a : listA) 
{ 
    found = false; 
    for (string b : listB) 
    { 
     if (b.equals(a)) 
     { 
     found = true; 
     break; 
     } 
    } 

    if (!found) 
     return false; 
} 

return true; 
+0

다른 데이터 구조로 변환하지 않는 한 더 효율적인 방법은 없습니다. –