如何比较两个对象(比如ArrayList)的值是否相等? 比如有两个ArrayList,如何比较其中存储的值是否相等?注意:是判断值相等,而且列表中可能存放了HashMap等非线性表如果需要重载equals()方法,最好是写个例子出来,先谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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;} 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; } 比较的是ArrayList存储的变量值如果元素也是容器类,进一步比较元素所存储的变量值 三人行好敏捷但是,list存储的对象可能也是容器类的,比如hashmap等就不能这样比较了 着就不好判断了等待高人ing…… 很奇怪,为什么楼主不相信ArrayList的equals()方法能做到这一点呢?ArrayList的equals()已经被其父类重写过了,本来就具有“深层比较”的功能。完全可以实现楼主想要的比较啊。 记得学习序列化时,学过这样一段话:“它不仅存储对象在内存中的原始数据,还能跟踪该对象内含的所有引用(references)并存储它们所指的对象,而后再追踪后者(对象)内各自包含的所有引用(references),反复进行”Java序列化将其看成一个对象网络,也就是数据结构中的“图”结构,设计了一个遍历算法。你也可以试试做一个遍历算法啊~~~~呵呵,我是纸上谈兵,随便说说~~~~~~~~~~` ArrayList的equals方法继承自AbstractList,下面是Java Doc对其的说明,应该不能完成楼主的要求.equalspublic 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。 试试就知道了: //创建两个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)); 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()); } 如何把下面程序运行的内容写入文件 JFileChooser 使用的问题 java线程里的join方法 分布式垃圾回收~~~ 小弟初学JAVA,特请各位高手帮忙解决一个问题 两个习题的疑惑!! 转贴 侃侃这个题目................ 这种写法好吗?问一个编码规范方面的 请教:关于SimpleDateFormat的问题??? 请教:如何获取IP地址等 java编程中如何取得当前windows的登陆名及密码????? 怎么取线程运行时间
{
if(array1.length!=array2.length)
return false;
for(int i=0;i<array1.length;i++)
if (array1.[i]!=array2.[i])
return false;
return true;
}
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;
}
如果元素也是容器类,进一步比较元素所存储的变量值
但是,list存储的对象可能也是容器类的,比如hashmap等就不能这样比较了
等待高人ing……
ArrayList的equals()已经被其父类重写过了,本来就具有“深层比较”的功能。完全可以实现楼主想要的比较啊。
“它不仅存储对象在内存中的原始数据,还能跟踪该对象内含的所有引用(references)并存储它们所指的对象,而后再追踪后者(对象)内各自包含的所有引用(references),反复进行”Java序列化将其看成一个对象网络,也就是数据结构中的“图”结构,设计了一个遍历算法。你也可以试试做一个遍历算法啊~~~~呵呵,我是纸上谈兵,随便说说~~~~~~~~~~`
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。
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));
是我错了,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());
}