比如有两个ArrayList,
如何比较其中存储的值是否相等?注意:是判断值相等,而且列表中可能存放了HashMap等非线性表如果需要重载equals()方法,最好是写个例子出来,先谢了

解决方案 »

  1.   

    boolean equals(int[] array1,int[] array2)
    {
       if(array1.length!=array2.length)
            return false;
       for(int i=0;i<array1.length;i++)
           if (array1.[i]!=array2.[i])
               return false;
       return true;
    }
      

  2.   

    Arrays.equals(array1,array2)public static boolean equals(Object[] a, Object[] a2) {
            if (a==a2)
                return true;
            if (a==null || a2==null)
                return false;        int length = a.length;
            if (a2.length != length)
                return false;        for (int i=0; i<length; i++) {
                Object o1 = a[i];
                Object o2 = a2[i];
                if (!(o1==null ? o2==null : o1.equals(o2)))
                    return false;
            }        return true;
        }
      

  3.   

    比较的是ArrayList存储的变量值
    如果元素也是容器类,进一步比较元素所存储的变量值
      

  4.   

    三人行好敏捷
    但是,list存储的对象可能也是容器类的,比如hashmap等就不能这样比较了
      

  5.   

    着就不好判断了
    等待高人ing……
      

  6.   

    很奇怪,为什么楼主不相信ArrayList的equals()方法能做到这一点呢?
    ArrayList的equals()已经被其父类重写过了,本来就具有“深层比较”的功能。完全可以实现楼主想要的比较啊。
      

  7.   

    记得学习序列化时,学过这样一段话:
    “它不仅存储对象在内存中的原始数据,还能跟踪该对象内含的所有引用(references)并存储它们所指的对象,而后再追踪后者(对象)内各自包含的所有引用(references),反复进行”Java序列化将其看成一个对象网络,也就是数据结构中的“图”结构,设计了一个遍历算法。你也可以试试做一个遍历算法啊~~~~呵呵,我是纸上谈兵,随便说说~~~~~~~~~~`
      

  8.   

    ArrayList的equals方法继承自AbstractList,下面是Java Doc对其的说明,应该不能完成楼主的要求.equals
    public boolean equals(Object o)将指定的对象与此列表进行相等性比较。当且仅当指定的对象也是一个列表,两个列表具有相同的大小,而且两个列表中所有相应的元素对都相等 时,才返回 true。(如果 (e1==null ? e2==null :e1.equals(e2)),则元素 e1 和 e2 相等。)换句话说,如果两个列表包含相同的元素,且元素的顺序也相同,才将它们定义为相等。此实现首先检查指定的对象是否为此列表。如果是,则返回 true;否则,它将检查指定的对象是否为一个列表。如果不是,它将返回 false;如果是,它将迭代两个列表,比较相应的元素对。如果有任何比较结果返回 false,则此方法将返回 false。如果某中某个迭代器在另一迭代器之前完全迭代元素,则会返回 false(因为列表是不等长的);否则,在迭代完成时将返回 true。 
    指定者:
    接口 Collection<E> 中的 equals
    指定者:
    接口 List<E> 中的 equals
    覆盖:
    类 Object 中的 equals
    参数:
    o - 与此列表进行相等性比较的对象。 
    返回:
    如果指定对象与此列表相等,则返回 true。
      

  9.   

    试试就知道了: //创建两个ArrayList
    ArrayList list1 = new ArrayList();
    ArrayList list2 = new ArrayList();

    //创建两个HashMap,并以完全相同的键和值填充
    HashMap map1 = new HashMap();
    map1.put("Java", "Sun");
    map1.put("C#", "Microsoft");

    HashMap map2 = new HashMap();
    map2.put("Java", "Sun");
    map2.put("C#", "Microsoft");

    //把两个HashMap分别添加到两个ArrayList中
    list1.add(map1);
    list2.add(map2);

    System.out.println("list1 == list2 ? " + list1.equals(list2));
      

  10.   

    To Dan1980() :
    是我错了,equals可以深层迭代比较,查了它的源码,是用递归实现的,Dan1980是对的!谢谢    public boolean equals(Object o) {
    if (o == this)
        return true;
    if (!(o instanceof List))
        return false; ListIterator<E> e1 = listIterator();
    ListIterator e2 = ((List) o).listIterator();
    while(e1.hasNext() && e2.hasNext()) {
        E o1 = e1.next();
        Object o2 = e2.next();
        if (!(o1==null ? o2==null : o1.equals(o2)))
    return false;
    }
    return !(e1.hasNext() || e2.hasNext());
        }