如何检查Arraylist中的两个String值是否包含在另一个Arraylist中?

时间:2015-12-26 21:03:21

标签: java arraylist data-structures

我有一个包含两个String值的Arraylist,我想检查第二个Arraylist中是否存在两者这些值。出于某种原因,我被困住了,我无法让我的代码工作。

这是我的代码:

    public static void main(String[] args) {

    ArrayList <String> list1 = new ArrayList <String>();

    list1.add("bob");
    list1.add("karen");

    ArrayList <String> list2 = new ArrayList <String>();

    list2.add("java");
    list2.add("karen");     
    list2.add("cook");
    list2.add("tablet");
    list2.add("cup");
    list2.add("coffee");

    for (String list11 : list1) {

        for (String list22 : list2) {

            if (list22.contains(list11)){

                System.out.println ("List 2 contains the strings from list1");
            }
        }
    }
}

我的if语句正在执行,即使list11中的所有值都不存在于list22中,但只有其中一个。我的目标是只有当list1中的所有值都出现在list2中时才执行if语句,而不会硬编码任何东西,因为list1最终应该增大。

我做错了什么?

2 个答案:

答案 0 :(得分:2)

使用此:

if(list2.containsAll(list1))
    System.out.println ("List 2 contains the strings from list1");
如果指定集合(list1)中的所有对象都是此List (list2)的元素,则

.containsAll()返回true,&amp;否则false

答案 1 :(得分:1)

在您的情况下,list2是您正在检查的list1的超集,for循环应如下所示:

boolean allElementsPresent = true;
    for (String list11 : list1) {
            if (!list22.contains(list11)){
                allElementsPresent = false;                
            }
    }
if(allElementsPresent){
    System.out.println ("List 2 contains the strings from list1");
}

无需迭代list2个对象。您只需迭代list1以检查list2中是否存在每个元素。