检查一个arraylist中的值是否存在于另一个arraylist中

时间:2013-10-25 13:14:36

标签: java arraylist

我需要检查一个arraylist中的任何值是否存在于另一个arraylist中:

import java.util.ArrayList;

public class SampleCode {

    ArrayList<Integer> in = new ArrayList<>();
    ArrayList<Integer> is = new ArrayList<>();
    public static void main(String[] args) {
        new SampleCode().work();
    }
    public void work(){
        in.add(3);in.add(4);in.add(5);
        is.add(1);is.add(2);is.add(3);
        if(is.containsAll(in)){
            System.out.println("It does not contain");
        }
    }
}

打印“它不包含”。我需要知道是否有办法比较这两个arraylists,如果其他arraylist中存在任何值,它应该返回false。我知道迭代可以帮助。有没有简单的方法呢?

6 个答案:

答案 0 :(得分:6)

我认为你可以使用

Collections.disjoint

Returns true if the two specified collections have no elements in common.

所以如果有任何共同的元素,它将返回false。

答案 1 :(得分:1)

试试这个

public void work(){
        in.add(3);in.add(4);in.add(5);;
        is.add(1);is.add(2);is.add(3);;
        ArrayList<Integer> matched = new ArrayList<Integer>(in);
        matched.retainAll(is);
        if(matched.size()>0){
            System.out.println(matched);
        }else{
            System.out.println("It does not contain");
        }
    }

答案 2 :(得分:1)

   Collection.indexOfSubList(List<?> source, List<?> target)
  

返回指定的第一个匹配项的起始位置   指定源列表中的目标列表,如果没有,则返回-1   这种情况。

更正式地,返回最低索引i,使得source.subList(i,i + target.size())。equals(target),如果没有这样的索引则返回-1。 (如果target.size()&gt; source.size(),则返回-1。) 此实现使用“强力”技术扫描源列表,依次在每个位置查找与目标的匹配。

Collections.disjoint(Collection<?> c1, Collection<?> c2)
  

如果两个指定的集合中没有元素,则返回true   常见的。

如果此方法用于不符合收集合同的集合,则必须小心谨慎。实现可以选择迭代任一集合并测试其他集合中的包含(或执行任何等效计算)。如果任一集合使用非标准相等性测试(排序与equals不兼容的SortedSet,或IdentityHashMap的密钥集),则两个集合必须使用相同的非标准相等性测试,否则此方法的结果未定义。 使用对其可能包含的元素有限制的集合时,还必须小心。允许集合实现为涉及他们认为不合格的元素的任何操作抛出异常。为了绝对安全,指定的集合应仅包含两个集合的合格元素的元素。 请注意,允许在两个参数中传递相同的集合,在这种情况下,当且仅当集合为空时,该方法才会返回true。

<强>抛出

NullPointerException - 如果一个集合包含null元素,并且null不是另一个集合的合格元素。 (可选)NullPointerException - 如果一个集合包含null元素,并且null不是另一个集合的合格元素。 (可选)ClassCastException - 如果一个集合包含的元素类型不符合其他集合的类型。 (可选)

答案 3 :(得分:1)

另一种可能的解决方案:

public static boolean containsNone(List<?> list, List<?> of) {
    List<?> temp = new ArrayList<Object>(list);
    temp.retainAll(of);
    return temp.isEmpty();
}

例如:

List<String> ref = Arrays.asList("w1", "w2", "w3");
List<String> ok = Arrays.asList("w4", "w5");
List<String> ko = Arrays.asList("w1", "w5");
System.out.println(containsNone(ok, ref));
System.out.println(containsNone(ko, ref));

打印:

true
false

答案 4 :(得分:0)

Collections.disjoint(list1, list2);

是你的答案

请参阅收藏文档

答案 5 :(得分:0)

public boolean isListNotOverlapping(List<Integer> yourList1, List<Integer> yourList2) {
    for(Integer i : yourList1) {
         if (yourList2.contains(i)) {
             return false;
         }
    }
    return true;
}