如何比较两个 ArrayList<List<String>>?

4
我希望比较这两个 ArrayList:
public static ArrayList<List<String>> arrayList1 = new ArrayList<List<String>>();
public static ArrayList<List<String>> arrayList2 = new ArrayList<List<String>>();

如果它们具有相同的元素,则返回true,否则返回false。

2
尝试自己去做。如果遇到任何错误,请在此处发布。 - Renjith
我已经尝试过了,只是我正在寻找一个好的算法。 - Programming Student
1
你已经尝试过什么了吗? - GeorgeVremescu
4个回答

14

3

您可以尝试使用Apache Commons CollectionUtils.retainAll 方法:返回一个包含collection1中所有同时也在collection2中的元素的集合。

ArrayList commonList = CollectionUtils.retainAll(arrayList1, arrayList2);

如果 commonList 的大小与 arrayList1 和 arrayList2 相同,那么可以说这两个列表是相同的。

如果它们的大小相同,但元素值不同呢? - Programming Student
尝试阅读API定义。它表明将返回在arrayList1和arrayList2中均相同的元素列表。 - Jayamohan
如果它们的大小相同,但元素值不同怎么办?为什么会有问题?提示:阅读链接的Javadocs! - Stephen C
3
这里的每个问题都可以通过“阅读Java文档”来回答,为什么我们没有想到呢?这是你的加一。 - fledglingCoder

0

我认为你可以自己完成它,不需要任何依赖。

public class ListComparator<T> {

    public Boolean compare(List<List<T>> a, List<List<T>> b) {
        if (a.size() != b.size()) {
            return false;
        }
        for (int i = 0; i < a.size(); i++) {
            if (a.get(i).size() != b.get(i).size()) {
                return false;
            }
            for (int k = 0; k < a.get(i).size(); k++) {
                if(!a.get(i).get(k).equals(b.get(i).get(k))) {
                    return false;
                }
            }
        }
        return true;
    }

}

使用

  ListComparator<String> compare = new ListComparator<String>();
  System.out.println(compare.compare(arrayList1, arrayList2));

我不使用foreach语句,因为我阅读了这篇文章http://habrahabr.ru/post/164177/(俄文),但你可以将其翻译成英文。

如果位置i处的元素为null,则调用a.get(i).size()将导致NullPointerException。 - helpermethod
我们如何能把 a.get(i).size() 获取为 a.get(i) 会返回一个字符串,而字符串没有 size() 方法? - Mohammad Misbah

0
使用以下代码。这将检查两个列表是否具有相同的元素。 -->> list1.equals(list2)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接