`

Java比较List是否相等

阅读更多

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()方法

 

2
1
分享到:
评论
5 楼 wx_hello 2014-06-13  
“ 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  



这个list的数据量达到上万条或更多的话,效率怎么样啊?
4 楼 zhuchao_ko 2013-09-18  
lijingshou 写道
zhuchao_ko 写道
zhuchao_ko 写道
何必呢 麻烦不
你就两个集合 看看有没有交集 没交集 不就完了 你这麻烦


不好意思打错了,是两个集合的交集,被要比较的集合的补集长度为0就说明两个集合中的
值相等。

我这里讲的重点是怎么样才算equals..不管你用什么方法去判断。终究还是要搞清楚怎么样才算equals。接下去我写一篇关于hashCode的


记住一点就是了:
覆写equals()必须覆写hashCode()
3 楼 lijingshou 2013-09-18  
zhuchao_ko 写道
zhuchao_ko 写道
何必呢 麻烦不
你就两个集合 看看有没有交集 没交集 不就完了 你这麻烦


不好意思打错了,是两个集合的交集,被要比较的集合的补集长度为0就说明两个集合中的
值相等。

我这里讲的重点是怎么样才算equals..不管你用什么方法去判断。终究还是要搞清楚怎么样才算equals。接下去我写一篇关于hashCode的
2 楼 zhuchao_ko 2013-09-18  
zhuchao_ko 写道
何必呢 麻烦不
你就两个集合 看看有没有交集 没交集 不就完了 你这麻烦


不好意思打错了,是两个集合的交集,被要比较的集合的补集长度为0就说明两个集合中的
值相等。
1 楼 zhuchao_ko 2013-09-18  
何必呢 麻烦不
你就两个集合 看看有没有交集 没交集 不就完了 你这麻烦

相关推荐

    java计算同一个list中是否有相同的值

    ### Java 计算同一 List 中是否有相同值 在 Java 编程中,判断一个 `List` 中是否存在重复元素是一项常见的需求。特别是在数据处理、验证或分析等场景中,确保数据的唯一性对于维持数据完整性至关重要。 #### 核心...

    比较两个集合是否相同(比较两个List内容是否相同)

    比较两个集合是否相同(比较两个List内容是否相同) 利用Java反射机制,获取到字段名、方法名、字段值,进行逐个比较,此处本人封装好了工具类,接收的是泛型,调用者只需要传入两个实体List即可进行比较,返回true...

    Java比较两个List的值是否相等的方法

    在Java编程中,比较两个List的值是否相等是一个常见的需求,特别是在处理数据集合时。这里我们探讨一种方法,用于判断两个List是否包含相同的元素,不论它们的顺序如何。这个方法的关键在于比较List的大小以及排序后...

    java比较两个list是否相同equals的代码详解

    Java比较两个List是否相同的equals方法详解 在 Java 编程中,比较两个 List 是否相同是一个非常重要的操作。今天,我们将探索 Java 中比较两个 List 是否相同的 equals 方法的实现。 首先,让我们了解一下为什么...

    Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并

    Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并 Java中 List《map》把里面map中某个key相同记录的其他key 的 value 合并

    java list和xml互转例子

    本示例涉及的核心知识点是将Java中的List对象与XML文档进行相互转换。这里,我们使用的库是dom4j-1.6.1.jar,这是一个强大的Java XML处理库。 首先,让我们详细了解一下List和XML。List是Java集合框架的一部分,它...

    java中List对象列表实现去重或取出及排序的方法

    equals方法用于比较两个对象是否相同,而hashCode方法用于计算对象的哈希码值。 例如,假设我们有一个Student类,想要去重Student对象列表。首先,我们需要重写Student类的equals和hashCode方法。 ```java public ...

    在Java 8中将List转换为Map对象方法

    在Java 8中将List转换为Map对象方法 在Java 8中,将List转换为Map对象是一种非常实用的技术,特别是在处理大规模数据时非常有用。本文将详细介绍在Java 8中将List转换为Map对象的方法,并提供了多种实现方式。 ...

    java List中对象多属性排序及各属性排序设置

    在Java编程中,排序是常见的数据处理操作,特别是在处理集合数据结构时,如List。本文将深入探讨如何在Java的List中对包含多个属性的对象进行排序,并且支持动态设置每个属性的排序方式。这个功能的实现是通过泛型和...

    java合并LIST

    "Java合并LIST" Java合并LIST是指将两个或多个LIST合并成一个LIST的操作。在Java语言中,我们可以使用addAll()方法或循环遍历的方式来实现LIST的合并。 在本文中,我们将通过一个示例代码来演示如何使用Java语言来...

    Java对List多个排序、查询条件的处理

    在Java编程中,对List进行多个排序和查询条件的处理是一项常见的任务,特别是在处理数据集合时。本篇文章将深入探讨如何使用Java实现这些操作,并基于给出的`GroupFilterSortUtils.java`文件,我们可以推断这是一个...

    Java判断2个List集合是否相等(不考虑元素的顺序)

    Java判断2个List集合是否相等(不考虑元素的顺序) Java是一种面向对象的编程语言,它提供了许多有用的集合类来存储和操作数据,其中List集合是最常用的集合之一。在实际开发中,我们经常需要判断两个List集合是否...

    易语言仿java集合 list map源码

    7. 性能优化:比较易语言实现的List和Map与Java原生实现的性能差异,了解如何优化数据结构和算法。 深入研究这些源码,不仅可以帮助你理解易语言的面向对象编程,还可以加深对Java集合框架的理解,同时也能锻炼你的...

    java List 排序 Collections.sort

    在Java编程中,`List`接口是集合框架的重要组成部分,提供了有序的元素存储。当我们需要对List中的元素进行排序时,`Collections.sort()`方法就派上了用场。这个方法能够根据元素的自然顺序或者自定义的比较器进行...

    java后台实现用list接收重复的对象属性

    java实现后台用list接收前台重复的name属性的值 接收重复属性 后台数组接收前台重复的name

    判断List和Map是否相等并合并List中相同的Map

    判断List和Map是否相等是Java编程中一个常见的问题。判断两个List或Map是否相等需要遵循特定的标准。List的相等判断通过equals()方法比较返回true即可。HashSet的相等判断先比较两个对象hashCode()方法返回的值是否...

    6种方法初始化JAVA中的list集合

    在Java编程中,List集合是开发人员经常使用的一种数据结构,用于存储有序的元素列表。本文将详细介绍6种初始化Java List集合的方法,并通过代码示例帮助理解每种方法的使用和特点。 1. 常规方式 这是最常见的初始化...

    Java判断List中相同值元素的个数实例

    在Java编程中,有时我们需要统计一个List集合中相同值出现的次数。这在处理数据集、分析重复项或进行数据清洗时非常常见。本篇文章将详细介绍如何通过Java实现这一功能,特别是利用Map数据结构来高效地计算List中...

    两个list比较 取不同的对象

    在Java编程中,经常需要对两个`List`进行比较,找出它们之间的差异。这通常涉及到数据结构的理解、算法设计以及编程实现等多个方面。本文将详细探讨如何通过一个示例代码来理解如何比较两个`List`并提取出不同的对象...

Global site tag (gtag.js) - Google Analytics