将ArrayLists的ArrayList与ArrayList进行比较

时间:2014-10-12 20:20:15

标签: java arraylist compare contains

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

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);

    }
}

al3

的输出
[No, No, No, Yes, Yes]

2 个答案:

答案 0 :(得分:1)

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

当您比较al1al2时,您正在做的是为al1的每个元素确定它是否发生在{{>任何地方 al2 1}}。我认为这就是你想要的。您决定它是否出现在al2的同一位置。

你应该做的第一件事是改进这种比较,这是相当低效的。由于您不关心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");

这样效率更高,因为您不必为每次查找遍历整个al2

现在,如果您想将列表列表与列表进行比较,我只能假设您想要告诉al4中任何列表的每个元素,它是否出现在{ {1}}。如果是这样,那么你想要

al2

对于ArrayList<String> al3 = new ArrayList<String>(); Set<String> al2set = new HashSet<String>(al2); for (List<String> tempList : al4) for (String temp : tempList) al3.add(al2set.contains(temp) ? "Yes" : "No"); 列表中的每个元素,这将为您提供一个单ArrayList<String>个记录,该元素是否位于al4某处。

您可能希望结果为al2,因此结果会模仿ArrayList<ArrayList<String>>的结构,在这种情况下,它只会稍微复杂一些:

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); } 将具有与a3list相同的结构,并且每个列表的每个元素都将是al4"Yes",具体取决于是否相应"No"中的元素包含在al4中的某个位置。

答案 1 :(得分:1)

您可以创建这样的方法。

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; 
    }

然后可以调用此方法并显示结果

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

for(int i = 0; i < result.length; i++)  {
    System.out.print(result[i] + " ");
}