ArrayList contains another ArrayList

匿名 (未验证) 提交于 2019-12-03 02:28:01

问题:

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)); 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!