Evo*_*lor 46 java comparison contains arraylist
可能有一个简单的单行程,我在这里找不到,但这是我的问题:
如何检查ArrayList是否包含另一个ArrayList中的所有对象?我正在寻找(如果它存在)的东西:
//INCORRECT EXAMPLE:
if(one.contains(two))
{
return true;
}
else
{
return false;
}
Run Code Online (Sandbox Code Playgroud)
例如:
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
Run Code Online (Sandbox Code Playgroud)
小智 6
这是我在用来声明两个数组在JUnit测试中相等时使用containsAll()的另一个示例:
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));
Run Code Online (Sandbox Code Playgroud)
示例中的代码没有意义,但无论如何,这里有一个示例。
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;
}
}
Run Code Online (Sandbox Code Playgroud)
它只是循环遍历所有 的two元素并检查它们是否在one。
然后是布尔值good值包含您想要的值。
编辑:哦哇,我完全忘记containsAll。哦,好吧,如果你真的想理解它,这是另一种方法。
您可以使用containsAll列表的方法进行检查.但是,这是线性操作.如果列表很大,您应该将其转换为HashSet第一个,然后执行containsAll:
HashSet tmp = new HashSet(one);
if (tmp.containsAll(two)) {
...
}
Run Code Online (Sandbox Code Playgroud)
如果长度one为2 N和长度为2 M,则该解决方案具有时间复杂度O(M+N); "平原" containsAll具有复杂性O(M*N),可能会更加严重.
| 归档时间: |
|
| 查看次数: |
76816 次 |
| 最近记录: |