我有两个不同大小的String ArrayLists。我需要编写一个返回true的方法iff List A(更大的列表)包含List B(更小的列表)的每个值。我该如何编写这样的方法? 谢谢!
答案 0 :(得分:3)
有时候只需要查看文档即可(即使是作业;])。
答案 1 :(得分:2)
听起来你应该使用集合而不是列表。在列表上执行此操作将为O(N^2)
,而对于HashSet或TreeSet,它将分别为O(N)
或O(NlogN)
。
但是如果性能不是主要问题(即列表相对较小,或者您不经常进行操作),那么只需在相应的列表对象上使用containsAll
方法。
答案 2 :(得分: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()
:)
答案 3 :(得分: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;