Java List有两个常见的子类ArrayList和LinkedList,他们都实现了AbstractList抽象类,它override了equals方法:
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()); }
由上可见,List的比较是基于存储对象的equals()方法,也仅仅只跟equals()方法有关,请看例子:
import java.util.*; public class Employee { public String name; public String id; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getId() { return id; } public void setId(String id) { this.id = id; } public Employee(String name, String id){ this.name = name; this.id = id; } public boolean equals(Object o){ if (this==o) return true; if (!(o instanceof Employee)) return false; final Employee other = (Employee)o; if(this.name.equals(other.getName())&& this.id==other.getId()) return true; else return false; } public static void main(String[] args){ // Compare String List List<String> l1 = new ArrayList<String>(); l1.add("A"); l1.add("B"); List<String> l2 = new ArrayList<String>(); l2.add("A"); l2.add("B"); List<String> l3 = new LinkedList<String>(); l3.add("A"); l3.add("B"); System.out.println(l1.equals(l2)); // true System.out.println(l1.equals(l3)); // true // Compare the Object List which doesn't have hashcode() method List<Employee> el1 = new ArrayList<Employee>(); List<Employee> el2 = new ArrayList<Employee>(); el1.add(new Employee("Jingshou", "e523779")); el2.add(new Employee("Jingshou", "e523779")); System.out.println(el1.equals(el2)); // true, hashcode() is not needed // Compare the HashSet Set<Employee> es1 = new HashSet<Employee>(); Set<Employee> es2 = new HashSet<Employee>(); es1.add(new Employee("Jingshou", "e523779")); es2.add(new Employee("Jingshou", "e523779")); System.out.println(es1.equals(es2)); // false, need to override the hashcode() } }
结论:
- 对于List的比较,只要确保存储的对象有正确的equals()方法,直接通过list1.equals(list2)比较
- 对于存储在Hash中的对象,如果重写了equals方法,必须确保重写一个正确的hashCode()方法
相关推荐
### Java 计算同一 List 中是否有相同值 在 Java 编程中,判断一个 `List` 中是否存在重复元素是一项常见的需求。特别是在数据处理、验证或分析等场景中,确保数据的唯一性对于维持数据完整性至关重要。 #### 核心...
比较两个集合是否相同(比较两个List内容是否相同) 利用Java反射机制,获取到字段名、方法名、字段值,进行逐个比较,此处本人封装好了工具类,接收的是泛型,调用者只需要传入两个实体List即可进行比较,返回true...
在Java编程中,比较两个List的值是否相等是一个常见的需求,特别是在处理数据集合时。这里我们探讨一种方法,用于判断两个List是否包含相同的元素,不论它们的顺序如何。这个方法的关键在于比较List的大小以及排序后...
Java比较两个List是否相同的equals方法详解 在 Java 编程中,比较两个 List 是否相同是一个非常重要的操作。今天,我们将探索 Java 中比较两个 List 是否相同的 equals 方法的实现。 首先,让我们了解一下为什么...
Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并 Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并
本示例涉及的核心知识点是将Java中的List对象与XML文档进行相互转换。这里,我们使用的库是dom4j-1.6.1.jar,这是一个强大的Java XML处理库。 首先,让我们详细了解一下List和XML。List是Java集合框架的一部分,它...
equals方法用于比较两个对象是否相同,而hashCode方法用于计算对象的哈希码值。 例如,假设我们有一个Student类,想要去重Student对象列表。首先,我们需要重写Student类的equals和hashCode方法。 ```java public ...
在Java 8中将List转换为Map对象方法 在Java 8中,将List转换为Map对象是一种非常实用的技术,特别是在处理大规模数据时非常有用。本文将详细介绍在Java 8中将List转换为Map对象的方法,并提供了多种实现方式。 ...
在Java编程中,排序是常见的数据处理操作,特别是在处理集合数据结构时,如List。本文将深入探讨如何在Java的List中对包含多个属性的对象进行排序,并且支持动态设置每个属性的排序方式。这个功能的实现是通过泛型和...
"Java合并LIST" Java合并LIST是指将两个或多个LIST合并成一个LIST的操作。在Java语言中,我们可以使用addAll()方法或循环遍历的方式来实现LIST的合并。 在本文中,我们将通过一个示例代码来演示如何使用Java语言来...
在Java编程中,对List进行多个排序和查询条件的处理是一项常见的任务,特别是在处理数据集合时。本篇文章将深入探讨如何使用Java实现这些操作,并基于给出的`GroupFilterSortUtils.java`文件,我们可以推断这是一个...
Java判断2个List集合是否相等(不考虑元素的顺序) Java是一种面向对象的编程语言,它提供了许多有用的集合类来存储和操作数据,其中List集合是最常用的集合之一。在实际开发中,我们经常需要判断两个List集合是否...
7. 性能优化:比较易语言实现的List和Map与Java原生实现的性能差异,了解如何优化数据结构和算法。 深入研究这些源码,不仅可以帮助你理解易语言的面向对象编程,还可以加深对Java集合框架的理解,同时也能锻炼你的...
在Java编程中,`List`接口是集合框架的重要组成部分,提供了有序的元素存储。当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行...
java实现后台用list接收前台重复的name属性的值 接收重复属性 后台数组接收前台重复的name
判断List和Map是否相等是Java编程中一个常见的问题。判断两个List或Map是否相等需要遵循特定的标准。List的相等判断通过equals()方法比较返回true即可。HashSet的相等判断先比较两个对象hashCode()方法返回的值是否...
在Java编程中,List集合是开发人员经常使用的一种数据结构,用于存储有序的元素列表。本文将详细介绍6种初始化Java List集合的方法,并通过代码示例帮助理解每种方法的使用和特点。 1. 常规方式 这是最常见的初始化...
在Java编程中,有时我们需要统计一个List集合中相同值出现的次数。这在处理数据集、分析重复项或进行数据清洗时非常常见。本篇文章将详细介绍如何通过Java实现这一功能,特别是利用Map数据结构来高效地计算List中...
在Java编程中,经常需要对两个`List`进行比较,找出它们之间的差异。这通常涉及到数据结构的理解、算法设计以及编程实现等多个方面。本文将详细探讨如何通过一个示例代码来理解如何比较两个`List`并提取出不同的对象...