2012-05-20 2 views
-1

Можно создать дубликат:
How to compare two arraylist?Сравнивая два ArrayLists

У меня есть два строковых ArrayLists разных размеров. Мне нужно написать метод, который возвращает true iff List A (более крупный список) содержит каждое значение списка B (меньший список). Как я могу написать такой метод? Спасибо!

+1

Это домашнее задание? Как и в, нужно ли вам создавать собственное решение вместо того, чтобы использовать что-то из API? – Makoto

+0

Два цикла, повторяющиеся в каждом списке. Однако каждый раз, когда я получаю совпадение, он возвращает true (даже если я не получил весь список. Я также попытался установить check booleans для каждого элемента, но я не мог понять, как проверить проверки! –

+0

Это для моей собственной программы. Не домашняя работа –

ответ

3

Посмотрите на List.containsAll().

Иногда заглядывать в документацию - это все, что требуется (даже для домашней работы;)).

2

Похоже, вы должны использовать наборы вместо списков. Выполнение этой операции в списке будет O(N^2), тогда как оно будет O(N) или O(NlogN) для HashSet или TreeSet соответственно.

Но если производительность не является серьезной проблемой (т. Е. Списки относительно малы или вы выполняете операцию нечасто), то просто используйте метод 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

Там, наверное, более эффективный способ, но то, что вы можете сделать, это цикл по большому списку, и для каждого элемента в большом списке, петля через небольшой список. Выйдите из небольшого списка раньше, если вы его найдете, если он его не найдет, верните false.

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

Нет более эффективного способа ... если вы не конвертируете его в другую структуру данных. –