1

我有两个数组列表

ArrayList<String> a1
ArrayList<String> a2

我想检查 a1 的所有元素是否都存在于 a2 中。这就是我从关于 SO 的问题中得到的

if (Arrays.asList(a2).containsAll(Arrays.asList(a1)))
{a2ContainsA1=true;}

这没有给出一致的结果......有没有其他方法可以做到这一点?

4

8 回答 8

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

于 2013-01-07T19:24:02.173 回答
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);
}
于 2013-01-07T19:22:15.343 回答
2

你已经有了你的列表a1a2这里,你想要的是告诉所有独特的元素a1是否也在a2. 因此,您只需要测试:

a1.containsAll(a2)

Arrays.asList()将从您作为参数提供的所有元素中构建一个列表(即使“所有元素”只是一个元素)。实际上,您当前的代码尝试查看包含 list 对象的单元素列表是否包含另一个包含list object a1的单元素列表中的所有元素。当且仅当列表和相等时,这是正确的,也就是说,如果这两个列表在相同的索引处包含相同的元素,根据合同。 a2a1a2List

这肯定不是你想要的!

于 2013-01-07T19:48:33.263 回答
1

您可以遍历其中一个数组并包含其中的每个元素

boolean a2ContainsA1 = true;
for(String str: a2){
    if(!a1.contains(str)){
      a2ContainsA1 = false;
}
于 2013-01-07T19:19:20.463 回答
1

您应该尝试(假设您不想保留 a1,或者克隆它)

boolean conditionVerified = a1.removeAll(a2).isEmpty();
于 2013-01-07T19:22:01.157 回答
0

您可以使用ListUtilsisEqualList()的方法,例如 -

ArrayList<String> a1 = new ArrayList<String>();
ArrayList<String> a2 = new ArrayList<String>();

boolean isEqual = ListUtils.isEqualList(a1,a2);
于 2013-01-07T19:43:01.820 回答
0
boolean contains = true;
for(int i=0 ; i<a1.size() ; i++)
{
  if(!a2.contains(a1[i])
      contains = false;
}

这是你要找的吗?

于 2013-01-07T19:48:01.393 回答
0

disjoint 似乎是一个不错的候选者。

check if disjoint using !Collections.disjoint(list1, list2);

http://www.tutorialspoint.com/java/util/collections_disjoint.htm上的基本示例

于 2014-03-21T15:00:16.443 回答