如何检查两个 ArrayList 是否不同,我不在乎发生了什么变化
如何检查两个数组列表是否彼此不同?我不在乎有什么区别,我只想知道它们是否不一样。
我每分钟都会从数据库中获取分数列表,只有当我获取的分数列表与我一分钟前获取的分数列表不同时,我才想将其发送给客户端。
现在,ArrayList 的值实际上是我创建的一个类(包含名称、lvl、rank、score)。
我需要在上面实现吗?equals()
如何检查两个数组列表是否彼此不同?我不在乎有什么区别,我只想知道它们是否不一样。
我每分钟都会从数据库中获取分数列表,只有当我获取的分数列表与我一分钟前获取的分数列表不同时,我才想将其发送给客户端。
现在,ArrayList 的值实际上是我创建的一个类(包含名称、lvl、rank、score)。
我需要在上面实现吗?equals()
正如Joachim所指出的,对于大多数应用程序,List.equals(Object o)
定义有效:
将指定的对象与此列表进行比较以确定是否相等。当且仅当指定的对象也是一个列表时,返回该值,两个列表具有相同的大小,并且两个列表中所有对应的元素对都相等。(两个元素,如果 .) 则相等。换言之,如果两个列表以相同的顺序包含相同的元素,则将其定义为相等。此定义可确保该方法在接口的不同实现中正常工作。
true
e1
e2
(e1==null ? e2==null : e1.equals(e2))
equals
List
但是,根据您使用它的方式,这可能无法按预期工作。例如,如果你有一个 ,它不太有效,因为数组继承自,它将相等性定义为引用恒等式。List<int[]>
equals
Object
List<int[]> list1 = Arrays.asList(new int[] { 1, 2, 3 });
List<int[]> list2 = Arrays.asList(new int[] { 1, 2, 3 });
System.out.println(list1.equals(list2)); // prints "false"
此外,具有不同类型参数的两个列表可以是:equals
List<Number> list1 = new ArrayList<Number>();
List<String> list2 = new ArrayList<String>();
System.out.println(list1.equals(list2)); // prints "true"
您还提到列表必须包含具有相同类型的元素。这是另一个元素不具有相同类型的示例,但它们是:equals
List<Object> list1 = new ArrayList<Object>();
List<Object> list2 = new ArrayList<Object>();
list1.add(new ArrayList<Integer>());
list2.add(new LinkedList<String>());
System.out.println(list1.equals(list2)); // prints "true"
因此,除非你清楚地定义平等对你来说意味着什么,否则这个问题可能会有非常不同的答案。但是,对于大多数实际目的,应该就足够了。List.equals
equals
更新后的信息表明,只要元素正确实现,就可以很好地完成工作(因为根据上面的API文档,在非元素上调用)。List.equals
equals
List<E>.equals
E.equals
null
因此,在这种情况下,如果我们有,比如说,a,那么必须返回 if 和 在相关字段上,它们都是(对于引用类型)或(对于基元)。List<Player>
Player
@Override equals(Object o)
true
o instanceof Player
equals
==
当然,当你,你也应该.勉强可接受的最小值为 ;稍微好一点就是;最好使用一个公式,该公式涉及定义 的所有字段。一个好的IDE可以为您自动生成方法。@Override equals
@Override int hashCode()
return 42;
return name.hashCode();
equals
equals/hashCode
Object.equals(Object)
Object.hashCode()
java.lang.Comparable
- 这里不需要,但另一个重要的Java API合约在组合上:equals/hashCode
开 vs :equals
==
用。只要列表中的元素正确实现,它就会返回正确的值。equals()
equals()
除非要忽略值的顺序,否则应转储两个对象中的值,并使用 来比较这些值。Set
equals()