Ответ 1
Существует метод, называемый containsAll
объявленный в интерфейсе java.util.Collection
. В вашей настройке one.containsAll(two)
дает желаемый ответ.
Вероятно, есть простой однострочный шрифт, который я просто не нахожу здесь, но это мой вопрос:
Как проверить, содержит ли ArrayList все объекты в другом массиве ArrayList? Я смотрю (если он существует) на что-то вроде:
//INCORRECT EXAMPLE:
if(one.contains(two))
{
return true;
}
else
{
return false;
}
Например:
ArrayList one = {1, 2, 3, 4, 5}
ArrayList two = {1, 2, 3} --> True
ArrayList two = {} --> True
ArrayList two = {1, 2, 3, 4, 5} --> True
ArrayList two = {1, 5, 2} --> True
ArrayList two = {1, 7, 4} --> False
ArrayList two = {0, 1, 3} --> False
ArrayList two = {4, 5, 6} --> False
ArrayList two = {7, 8, 9} --> False
Существует метод, называемый containsAll
объявленный в интерфейсе java.util.Collection
. В вашей настройке one.containsAll(two)
дает желаемый ответ.
В интерфейсе списка:
myList.containsAll(...);
Взгляните на метод containsAll(Collection<?> c)
из интерфейса List
. Я думаю, это то, что вы ищете.
Вы можете использовать метод containsAll
для проверки. Однако это линейная операция. Если список большой, вы должны сначала HashSet
его в HashSet
, а затем выполнить containsAll
:
HashSet tmp = new HashSet(one);
if (tmp.containsAll(two)) {
...
}
Если длина one
равна N
а длина двоичного числа равна M
, это решение имеет временную сложность O(M+N)
; "plain" containsAll
имеет сложность O(M*N)
, что может быть значительно хуже.
Ваш код в примере не имеет смысла, но вот пример в любом случае.
ArrayList<Integer> one, two;
//initialize
boolean good = true;
for (int i = 0; i < two.size(); i ++) {
if (!(one.contains(two.get(i))) {
good = false;
break;
}
}
Он просто прокручивает все two
элемента и проверяет, находятся ли они в one
.
Тогда булева good
содержит значение, которое вы хотите.
См. ArrayList # содержит.
EDIT: О, ничего себе, я полностью забыл, что содержит все. Ну, это альтернативный способ сделать это, если вы действительно хотите это понять.
Вот еще один пример использования containsAll(), который я использовал для утверждения, что два массива равны в тестировании JUnit:
List<String> expected = new ArrayList<String>();
expected.add("this");
expected.add("that");
expected.add("another");
List<String> actual = new ArrayListString();
actual.add("another");
actual.add("that");
actual.add("this");
Assert.assertTrue("The lists do not match!", expected.containsAll(actual));