【问题标题】:How to compare two ArrayList<List<String>>如何比较两个 ArrayList<List<String>>
【发布时间】:2013-01-27 07:15:51
【问题描述】:

我想比较一下这两个ArrayList

public static ArrayList<List<String>> arrayList1 = new ArrayList<List<String>>();
public static ArrayList<List<String>> arrayList2 = new ArrayList<List<String>>();

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

【问题讨论】:

  • 尝试自己做。如果您在其中遇到任何错误,请在此处发布。
  • 我试过了。只是我在寻找好的算法。
  • 你已经尝试了什么?

标签: java arrays arraylist


【解决方案1】:

你试过了吗

  arrayList1 .equals ( arrayList2 )

这是真的,如果它们包含相同顺序的相同元素

new HashSet(arrayList1) .equals (new HashSet(arrayList2)) 

如果顺序无关紧要

http://www.docjar.com/html/api/java/util/AbstractList.java.html

【讨论】:

    【解决方案2】:

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

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

    如果commonList的大小等于  arrayList1 和arrayList2你可以说两个列表是一样的。

    【讨论】:

    • 如果它们的大小相同,但元素的值不同怎么办?
    • 尝试阅读 API 定义。它说它将返回arrayList1和arrayList2中相同的元素列表。
    • “如果它们的大小相同,但元素的值不同怎么办?” - 为什么会有问题?提示:阅读链接的 javadocs!
    • 这里的每一个问题都可以通过“阅读java文档”来回答,为什么我们没有想到呢?这是你的 +1。
    【解决方案3】:

    我认为你可以自己做,没有任何依赖。

    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。
    • 我们如何获得a.get(i).size(),因为a.get(i) 将返回一个字符串并且字符串没有size() 方法?
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 2014-12-03
      • 1970-01-01
      • 1970-01-01
      • 2012-03-25
      • 1970-01-01
      • 2010-12-05
      • 2013-06-08
      • 1970-01-01
      • 2012-01-25
      相关资源
      最近更新 更多