Java 将ArrayList中的ArrayList与ArrayList进行比较

Java 将ArrayList中的ArrayList与ArrayList进行比较,java,arraylist,compare,contains,Java,Arraylist,Compare,Contains,在下面的示例中,如何将ArrayList al4的内容与其他ArrayList的内容进行比较?以同样的方式,我将al1与al2进行了比较 import java.util.ArrayList; public class Details { public static void main(String[] args) { ArrayList<String> al1 = new ArrayList<String>(); al1.add

在下面的示例中,如何将
ArrayList al4
的内容与其他
ArrayList
的内容进行比较?以同样的方式,我将
al1
al2
进行了比较

import java.util.ArrayList;

public class Details {
    public static void main(String[] args) {
        ArrayList<String> al1 = new ArrayList<String>();
        al1.add("hi");
        al1.add("How are you");
        al1.add("Good Morning");
        al1.add("bye");
        al1.add("Good night");

    ArrayList<String> al2 = new ArrayList<String>();
    al2.add("Howdy");
    al2.add("Good Evening");
    al2.add("bye");
    al2.add("Good night");

    ArrayList<ArrayList<String>> al4 = new ArrayList<ArrayList<String>>();
    al4.add(al1);

    // Storing the comparison output in ArrayList<String>
    ArrayList<String> al3 = new ArrayList<String>();
    for (String temp : al1)
        al3.add(al2.contains(temp) ? "Yes" : "No");
    System.out.println(al3);

    }
}

这取决于你的意思。您不能直接将
al4
al2
进行比较,因为它们的类型不同:一个是
ArrayList
,另一个是
ArrayList

当您比较
al1
al2
时,您所做的是确定
al1
的每个元素是否出现在
al2
中的任何位置。我想这就是你想要的。您无法确定它是否发生在
al2
中的同一位置

import java.util.ArrayList;

public class Details {
    public static void main(String[] args) {
        ArrayList<String> al1 = new ArrayList<String>();
        al1.add("hi");
        al1.add("How are you");
        al1.add("Good Morning");
        al1.add("bye");
        al1.add("Good night");

    ArrayList<String> al2 = new ArrayList<String>();
    al2.add("Howdy");
    al2.add("Good Evening");
    al2.add("bye");
    al2.add("Good night");

    ArrayList<ArrayList<String>> al4 = new ArrayList<ArrayList<String>>();
    al4.add(al1);

    // Storing the comparison output in ArrayList<String>
    ArrayList<String> al3 = new ArrayList<String>();
    for (String temp : al1)
        al3.add(al2.contains(temp) ? "Yes" : "No");
    System.out.println(al3);

    }
}
你应该做的第一件事是改进这种比较,这是相当低效的。由于您不关心
al2
的顺序,因此应按如下方式重写比较:

ArrayList<String> al3 = new ArrayList<String>();
Set<String> al2set = new HashSet<String>(al2);
for (String temp : al1)
    al3.add(al2set.contains(temp) ? "Yes" : "No");
这将为您提供一个平面
ArrayList
,记录
al4
列表中的每个元素,无论该元素是否在
al2
中的某个位置

您可能希望结果是一个
ArrayList
,以便结果模拟
al4
的结构,在这种情况下,结果只会稍微复杂一些:

ArrayList<ArrayList<String>> al3list = new ArrayList<ArrayList<String>>();
Set<String> al2set = new HashSet<String>(al2);
for (List<String> tempList : al4) {
    ArrayList<String> al3 = new ArrayList<String>();
    for (String temp : tempList)
        al3.add(al2set.contains(temp) ? "Yes" : "No");
    al3list.add(al3);
}
ArrayList al3list=new ArrayList();
Set al2set=新哈希集(al2);
对于(列表圣殿骑士:al4){
ArrayList al3=新的ArrayList();
用于(字符串临时值:tempList)
al3.添加(al2set.contains(temp)-“是”:“否”);
al3list.add(al3);
}

执行此操作后,
a3list
将具有与
al4
相同的结构,每个列表的每个元素将是
“Yes”
“No”
,这取决于
al4
中的对应元素是否包含在
al2
中的某个位置。您可以创建这样的方法

import java.util.ArrayList;

public class Details {
    public static void main(String[] args) {
        ArrayList<String> al1 = new ArrayList<String>();
        al1.add("hi");
        al1.add("How are you");
        al1.add("Good Morning");
        al1.add("bye");
        al1.add("Good night");

    ArrayList<String> al2 = new ArrayList<String>();
    al2.add("Howdy");
    al2.add("Good Evening");
    al2.add("bye");
    al2.add("Good night");

    ArrayList<ArrayList<String>> al4 = new ArrayList<ArrayList<String>>();
    al4.add(al1);

    // Storing the comparison output in ArrayList<String>
    ArrayList<String> al3 = new ArrayList<String>();
    for (String temp : al1)
        al3.add(al2.contains(temp) ? "Yes" : "No");
    System.out.println(al3);

    }
}
public static boolean[] compare(ArrayList<String> al1, ArrayList<String> al2) {

        boolean result[] = new boolean[al1.size()]; // result

        int i = 0;  // index

        /*
         * Test if an element of al1 occurs in al2
         */
        for(String s : al1) {
            if(al2.contains(s)) {
                result[i] = true;
            }
            else {
                result[i] = false;
            }
            i++;    // increment
        }

        return result; 
    }
公共静态布尔[]比较(ArrayList al1,ArrayList al2){
布尔结果[]=新布尔值[al1.size()];//结果
int i=0;//索引
/*
*测试al1元素是否出现在al2中
*/
用于(字符串s:al1){
如果(al2.包含){
结果[i]=真;
}
否则{
结果[i]=假;
}
i++;//增量
}
返回结果;
}
然后调用此方法并显示结果

boolean result[] = compare(al1, al2);

for(int i = 0; i < result.length; i++)  {
    System.out.print(result[i] + " ");
}
boolean result[]=compare(al1,al2);
for(int i=0;i
出色而透彻的解释。非常感谢,我真的很感激!在本例中,当我将另一个
ArrayList
添加到
al4
中时,在执行时,它似乎将上一个索引的副本添加到下一个索引中,以及应该存储在该索引中的正确值。@user2988501我不确定我是否理解了您的意思。我给出的代码将处理整个
al4
。是否要将新列表添加到
al4
,然后只处理最后一位?如果我误解了您的意图,您可能需要给出一个示例。是的,我将如何编辑for循环,以便在“al4”中添加另一个“ArrayList”时不会导致“al3list”中出现重复值。我发现,括号放错了位置!