我有两个数组列表
ArrayList<String> a1
ArrayList<String> a2
我想检查 a1 的所有元素是否都存在于 a2 中。这就是我从关于 SO 的问题中得到的
if (Arrays.asList(a2).containsAll(Arrays.asList(a1)))
{a2ContainsA1=true;}
这没有给出一致的结果......有没有其他方法可以做到这一点?
我有两个数组列表
ArrayList<String> a1
ArrayList<String> a2
我想检查 a1 的所有元素是否都存在于 a2 中。这就是我从关于 SO 的问题中得到的
if (Arrays.asList(a2).containsAll(Arrays.asList(a1)))
{a2ContainsA1=true;}
这没有给出一致的结果......有没有其他方法可以做到这一点?
不确定我是否正确理解了您的问题,您为什么要使用Arrays.asList()
?
试过这个:
ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
a1.add("a");
a1.add("b");
a2.add("b");
a2.add("a");
System.out.println(a2.containsAll(a1));
它输出true
添加一个额外的元素a1
将失败(如预期的那样):
ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
a1.add("a");
a1.add("b");
a1.add("c");
a2.add("b");
a2.add("a");
System.out.println(a2.containsAll(a1));
它输出false
我认为将两个 ArrayLists 转换为 Set 对象然后使用 set 操作来确定一个是否是另一个的子集会更容易。这也将满足@fge 关于重复性的评论:
ArrayList<String> a1 = ...;
ArrayList<String> a2 = ...;
public boolean isSubset(ArrayList<String> a1, ArrayList<String> a2) {
Set<String> s1 = new HashSet(a1);
Set<String> s2 = new HashSet(a2);
return s1.containsAll(s2);
}
你已经有了你的列表a1
和a2
这里,你想要的是告诉所有独特的元素a1
是否也在a2
. 因此,您只需要测试:
a1.containsAll(a2)
Arrays.asList()
将从您作为参数提供的所有元素中构建一个列表(即使“所有元素”只是一个元素)。实际上,您当前的代码尝试查看包含 list 对象的单元素列表是否包含另一个包含list object a1
的单元素列表中的所有元素。当且仅当列表和相等时,这是正确的,也就是说,如果这两个列表在相同的索引处包含相同的元素,根据合同。 a2
a1
a2
List
这肯定不是你想要的!
您可以遍历其中一个数组并包含其中的每个元素
boolean a2ContainsA1 = true;
for(String str: a2){
if(!a1.contains(str)){
a2ContainsA1 = false;
}
您应该尝试(假设您不想保留 a1,或者克隆它)
boolean conditionVerified = a1.removeAll(a2).isEmpty();
您可以使用ListUtilsisEqualList()
的方法,例如 -
ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
boolean isEqual = ListUtils.isEqualList(a1,a2);
boolean contains = true;
for(int i=0 ; i<a1.size() ; i++)
{
if(!a2.contains(a1[i])
contains = false;
}
这是你要找的吗?
disjoint 似乎是一个不错的候选者。
check if disjoint using !Collections.disjoint(list1, list2);
http://www.tutorialspoint.com/java/util/collections_disjoint.htm上的基本示例