我有两个arraylist
ArrayList<String> a1
ArrayList<String> a2
我想检查a1的所有元素是否都存在于a2中。 这就是我正在尝试从SO
的问题得到的if (Arrays.asList(a2).containsAll(Arrays.asList(a1)))
{a2ContainsA1=true;}
没有给出一致的结果......有没有其他方法可以做到这一点?
答案 0 :(得分:7)
我不确定我是否正确理解了您的问题,为什么使用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
答案 1 :(得分:2)
我认为将两个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);
}
答案 2 :(得分:2)
此处已有您的列表a1
和a2
,您想要知道a1
中的所有唯一元素是否也在a2
中。因此,您只需要测试:
a1.containsAll(a2)
Arrays.asList()
将根据您作为参数提供的所有元素构建一个列表(即使&#34;所有元素&#34;只是一个元素)。实际上,您当前的代码会尝试查看包含列表对象 a1
的单个元素列表是否包含包含列表对象的另一个单元素列表中的所有元素 a2
。当且仅当列表a1
和a2
相等时,这是正确的,也就是说,如果这两个列表在同一索引中包含相同的元素,则根据List
契约。
这肯定不是你想要的!
答案 3 :(得分:1)
你可以遍历其中一个数组并在其中的每个元素上包含
boolean a2ContainsA1 = true;
for(String str: a2){
if(!a1.contains(str)){
a2ContainsA1 = false;
}
答案 4 :(得分:1)
你应该尝试(假设你不想保持a1,或者克隆它)
boolean conditionVerified = a1.removeAll(a2).isEmpty();
答案 5 :(得分:0)
您可以使用ListUtils的方法isEqualList()
,例如
ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();
boolean isEqual = ListUtils.isEqualList(a1,a2);
答案 6 :(得分:0)
boolean contains = true;
for(int i=0 ; i<a1.size() ; i++)
{
if(!a2.contains(a1[i])
contains = false;
}
这是你要找的吗?
答案 7 :(得分:0)
脱节似乎是一个很好的候选人..
check if disjoint using !Collections.disjoint(list1, list2);
http://www.tutorialspoint.com/java/util/collections_disjoint.htm
的基本示例