`
LynBazinga
  • 浏览: 11519 次
社区版块
存档分类
最新评论

集合类List去除重复元素

阅读更多

 一个很常有且简单的问题,去除List<Entity>中的重复值,整理一下:

 

package com.list;

public class Person {
	
	/**
	 * 居民身份证
	 */
	private Long personId;
	
	/**
	 * 姓名
	 */
	private String name;
	
	/**
	 * 年龄
	 */
	private int age;

	public Long getPersonId() {
		return personId;
	}

	public void setPersonId(Long personId) {
		this.personId = personId;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Person [personId=" + personId + ", name=" + name + ", age="
				+ age + "]";
	}

	@Override
	public int hashCode() {
		return personId != null ? personId.hashCode():0;
	}

	@Override
	public boolean equals(Object obj) {
		 if (this == obj) return true;
	     if (obj == null || getClass() != obj.getClass()) return false;
	     
	     Person p = (Person)obj;
	     if( getPersonId().equals(p.getPersonId()) 
	    		 && getName().equals(p.getName()) 
	    		 && getAge() == p.getAge())
	    	 return true;
	     
	     return false;
	     
	}

}

  方法equals是比较两个对象的内存地址是否一样,这很好解释,感觉根据面向对象的原则,没有两个完全一模一样的对象存在,不过为了在编码中实现各种业务需求,有时必须重写equals的方法

 

 重写hashcode,equals的原则:

 1)能不重写equals和hashcode的情况下,尽量避免hashcode和equals的重写

 2)重写equals必须重写hashcode

 3)重写完hashcode方法后,避免改变参与计算hashcode的那些Entity的属性的值,否则会发生一些意外的事情,例如list.remove,hashset中的一些方法的异常

 

测试代码如下:

package com.list;

import java.util.ArrayList;
import java.util.List;

import org.junit.Before;

public class Test {
	
	private List<Person> persons = null;
	
	private Person p1,p2,p3;
	
	@Before
	public void before(){
		persons = new ArrayList<Person>();
		p1 = new Person();
		p1.setPersonId(123456L);
		p1.setName("zhangsan");
		p1.setAge(11);
		p2 = new Person();
		p2.setPersonId(123456L);
		p2.setName("zhangsan");
		p2.setAge(11);
		p3 = new Person();
		p3.setPersonId(123457L);
		p3.setName("lisi");
		p3.setAge(12);
		persons.add(p1);
		persons.add(p2);
		persons.add(p3);
	}
	
	
	@org.junit.Test
	public void test(){
		
		List<Person> personList = new ArrayList<Person>();
		if(null != persons){
			for(Person p:persons)
			if( !personList.contains(p) ){
				personList.add(p);
			}
		}
		System.out.println(personList.size());
	}
}

 对大多是的list的操作中,例如list.contains操作中,先比较hashcode如果相等,再比较equals的方法

 全是一些小知识,理解的不对,请指出,共同成长~

 

 

 

分享到:
评论

相关推荐

    java 去除重复元素

    在Java编程中,处理数据集合时,我们常常会遇到去除重复元素的需求。这可能是为了保持数据的唯一性,或者为了优化存储和计算效率。本文将详细介绍如何在Java中去除重复元素,主要关注数组和列表这两种常见数据结构。...

    java集合类详解(set list ArrayList等java集合类详述)

    Set 是一个不能包含重复元素的集合,SortedSet 是一个按照升序排列元素的 Set。List 是一个有序的集合,可以包含重复的元素,并提供了按索引访问的方式。Map 是一个包含了 key-value 对的集合,SortedMap 是一个按照...

    C#查找列表中所有重复出现元素的方法

    `List&lt;T&gt;`是.NET框架提供的一个泛型类,它实现了`IList&lt;T&gt;`、`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口,提供了动态数组的功能,允许我们方便地添加、删除和查找元素。对于查找重复元素,我们通常会遍历列表,比较每...

    去除链表重复元素-Java 实现

    在Java中,去除单链表中的重复元素可以通过使用哈希集合(HashSet)来实现,该集合用于存储已经遍历过的元素。在遍历链表的过程中,我们将每个元素与集合中的元素进行比较,如果发现重复,则删除链表中的该元素。 ...

    list集合去除重复对象的实现

    在处理数据时,我们有时需要去除集合中的重复元素。这里我们将详细讨论如何在`List`集合中去除重复对象的实现,特别是针对对象类型的集合。 首先,我们要明确一点:在Java中,当我们说两个对象是重复的,通常是指...

    Java判断List中有无重复元素的方法

    由于HashSet不允许重复,如果有重复元素,它们在转换过程中会被自动去除。接着,我们比较list的大小和转换后的HashSet的大小。如果两者大小不同,说明原始list中存在重复元素,`isRepeat`变量将被设置为`true`。 ...

    java自定义集合类

    如果你希望实现一个无序且不允许重复元素的集合,那么`Set`接口可能是更好的选择。 2. **定义属性和行为**:根据业务需求,定义集合类所需的属性,如容量、是否同步等。然后,实现接口中声明的方法,如`add()`、`...

    如何去掉list集合中重复的元素?.docx

    Set接口下的集合类如HashSet不存储重复元素,可以方便地去除列表中的重复项。将List转换为Set,然后再转换回List即可: ```java List&lt;PenBean&gt; uniquePenBeanList = new ArrayList(new HashSet(penBeanList)); ``` ...

    Java集合排序及java集合类详解.pdf

    - **概述**:Set是一种不允许重复元素的集合,主要用于去除重复数据。 - **常用方法**: - `add(E e)`:向集合添加一个元素。 - `remove(Object o)`:从集合中移除指定元素。 - `contains(Object o)`:检查集合...

    顺序表删除重复元素java.docx

    6. **输出**:程序的输出首先显示原始列表,然后显示删除重复元素后的列表,展示了removeDuplicates方法的功能。 这个例子展示了如何利用ArrayList的特性有效地删除顺序表中的重复元素。值得注意的是,虽然这种方法...

    List列表拒绝添加重复信息

    然而,在某些情况下,我们可能希望创建一个不允许添加重复元素的List。在这种场景下,Python提供了多种策略来实现这个功能。 首先,我们可以使用Python的内置数据结构`set`。Set类似于List,但不包含重复元素,并且...

    Java基础----集合类汇总

    本文将深入探讨Java集合类的汇总,包括List、Set和Map这三大核心接口及其实现类。 首先,让我们从List接口开始。List是一种有序的集合,允许有重复元素,并且支持通过索引来访问元素。ArrayList和LinkedList是List...

    Android List删除重复数据

    方法三:删除重复元素,并保持顺序 该方法使用 HashSet 和 Iterator 来删除重复数据,并保持列表的顺序。首先创建一个 HashSet,然后遍历列表,检查每个元素是否在 HashSet 中,如果不在,则添加到 HashSet 和新列表...

    去掉list中的重复对象

    在编程领域,尤其是在Java开发中,我们经常遇到需要处理数据集合,例如列表(List),去除其中的重复元素。"去掉list中的重复对象"这个话题是一个常见的需求,特别是在处理业务数据时,确保数据的唯一性至关重要。这...

    集合类(二):List集合

    List接口继承自Collection接口,它定义了一种有序的、允许重复元素的集合。本篇我们将深入探讨List集合,包括其特点、常用实现类、操作方法以及与数组的对比。 List接口的特点: 1. 有序性:List中的元素是有顺序的...

    两个集合比较(新增、编辑、删除)

    集合是存储一组元素的数据结构,而List是一种有序的集合,允许重复元素,并且可以通过索引访问。 1. **新增集合**: 当我们需要找出两个List之间的差异,即在第二个List中新增的元素时,可以使用`ArrayList`或`...

    java集合类的代码

    - `HashSet`:不允许重复元素,不保证元素顺序,使用哈希表实现,插入和查找速度较快。 - `LinkedHashSet`:与HashSet类似,但保留了插入的顺序,遍历性能更好。 3. **HashMap和TreeMap**: - `HashMap`:键值对...

    C#的6种常用集合类大比拼

    `HashSet&lt;T&gt;`是一个不允许重复元素的集合,它基于哈希表实现,提供了高效的元素添加、删除和查找操作。与`List&lt;T&gt;`不同,`HashSet&lt;T&gt;`没有顺序概念,因此不适合需要按特定顺序访问元素的场景。 ### 结论 在C#中...

    JSP应用开发-Java集合类-List接口.pptx

    * int lastIndexOf(Object o):List中如果存在多个重复元素,indexOf()方法返回第一个匹配元素的index,lastIndexOf(o)是返回最后一个匹配元素的index * ListIterator listIterator():返回列表中元素的列表迭代器 *...

    java集合类详解

    对于集合类的迭代,每个集合类都应该提供一个迭代器(Iterator)实例,通过迭代器可以遍历集合中的所有元素,而且能够安全地在遍历过程中删除元素。 整个集合框架非常庞大,本文仅就部分概念和类进行了详细说明,...

Global site tag (gtag.js) - Google Analytics