可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
There is probably a simple one-liner that I am just not finding here, but this is my question:
How to check if an ArrayList contains all of the objects in another ArrayList. I am looking (if it exists) for something along the lines of:
//INCORRECT EXAMPLE: if(one.contains(two)) { return true; } else { return false; }
For example:
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
回答1:
There is a method called containsAll
declared in the java.util.Collection
interface. In your setting one.containsAll(two)
gives the desired answer.
回答2:
Per the List interface:
myList.containsAll(...);
回答3:
Take a look at containsAll(Collection> c)
method from List
interface. I think it is what you are looking for.
回答4:
Your code in the example doesn't make sense, but here's an example anyway.
ArrayList one, two; //initialize boolean good = true; for (int i = 0; i
It simply loops through all of two
's elements and checks to see if they are in one
.
Then the boolean good
contains the value you want.
See ArrayList#contains.
EDIT: oh wow, I totally forgot containsAll. Oh well, this is an alternate way to do it if you really want to understand it.
回答5:
You can use containsAll
method of the list to do the check. However, this is a linear operation. If the list is large, you should convert it to HashSet
first, and then perform containsAll
:
HashSet tmp = new HashSet(one); if (tmp.containsAll(two)) { ... }
If the length of one
is N
and the length of two is M
, this solution has time complexity of O(M+N)
; the "plain" containsAll
has the complexity of O(M*N)
, which may be significantly worse.
回答6:
Here is another example use of containsAll() that I have used for asserting that two arrays are equal in JUnit testing:
List expected = new ArrayList(); expected.add("this"); expected.add("that"); expected.add("another"); List actual = new ArrayListString(); actual.add("another"); actual.add("that"); actual.add("this"); Assert.assertTrue("The lists do not match!", expected.containsAll(actual));