一个很常有且简单的问题,去除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集合框架中的List接口是一种有序的集合,它可以存储重复的元素。它是Collection接口的子接口,提供了一系列可以对列表进行操作的方法,如添加、插入、删除、获取元素等。List接口还可以通过索引访问元素,类似于...
可扩展为自定义集合类。 实现类:8个实现类(实线表示),对接口的具体实现。 在很大程度上,一旦您理解了接口,您就理解了框架。虽然您总要创建接口特定的实现,但访问实际集合的方法应该限制在接口方法的使用上...
List接口提供了按照索引位置访问元素的方法,以及添加、删除和修改元素的操作。List接口的实现类包括ArrayList、LinkedList等。 Set接口是无序的集合,元素不能重复。Set接口的实现类包括HashSet、LinkedHashSet等...
其中,List是一个有序的集合,可以包含重复的元素;而Set是一个不重复的集合,元素是无序的。 Collection接口的常用方法 1、add(Object obj):向集合中添加一个元素obj; 2、addAll(Collection c):将集合c中的所有...
1、Collection接口 Collection接口是所有集合类的父接口,它定义了集合的基本操作,如添加、删除、遍历等。Collection接口有两个重要的子接口:List和Set。 2、List接口 List接口是有序集合,可以存储重复元素。它...
第五章 线性表和串习题 5.1若将顺序表中记录其长度的分量listlen改为指向最后一个元素的位置last,在实 现各基本运算时需要做那些修改? 5.2试用顺序表表示较多位数的大整数,以便于这类数据的存储。请选择合适的...
List、Set、MapList与Set集合的区别List、Map、Set三个接口,存取元素时,各有什么特点SetListMapList、Set、Map遍历的实现先来个Employee实体类List遍历的三种方式Set遍历的两种方式Map的几种遍历 List与Set集合的...
Java集合Collection接口List接口重复有序List接口的主要实现类,底层用数组实现优点访问速度快缺点插入和删除开销大:增加和删除元素时,需要对整个
65、Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别 17 66、HashMap和Hashtable的区别 17 67、说出ArrayList,Vector, LinkedList的存储性能和特性 17 68、java中有几...
ArrayList是一种变长的集合类,基于定长数组实现,使用默认构造方法初始化出来的容量是10(1.7之后都是延迟初始化,即第一次调用add方法添加元素的时候才将elementData容量初始化为10) ArrayList允许空值和重复元素...
68、你所知道的集合类都有哪些?主要方法? 69、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对? 70、TreeSet里面放对象,如果同时放入了父类和子类的实例对象,那比较时使用的是...
List集合是有序集合,集合中的元素可以重复,访问集合中的元素可以根据元素的索引来访问,查找元素效率高,插入删除效率低。 Set集合是无序集合,集合中的元素不可以重复,检索效率低下,删除和插入效率高,访问集合...
⽼掉⽛的问题了,还在这⾥⽼⽣常谈:List特点:元素有放⼊顺序,元素可重复 ,Set特点:元素⽆放⼊顺序,元素不可重复。 1-2)数据库的三⼤范式? 原⼦性、⼀致性、唯⼀性 1-3)java 的io类的图解 1-4)对象与引⽤...
文章目录1List接口1.1 Array List1.2LInkedList2.collections类2.1是一个集合工具类,内部保存的是静态方法2.2可变参数3.set接口3.1set接口的特点3.2hashSet3.3LinkedHashSet3.4TreeSet. 1List接口 List接口继承...
Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符...
Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符...
数据结构,如何遍历List中的元素? 如果要按照键值保存或者访问数据,使用什么数据结构? 要掌握Collection相关的接口和类的使用 56.使用StringBuffer类与String类进行字符串连接时有何区别? 57.调用Thread类的...
2. 对于给定的 n个元素,可以构造出的逻辑结构有 (1)集合 , (2)线性结构 , (3)树型结构 ,_图状结构_(4)_四种。 【中科院计算所 1999 二、1(4分)】 3.数据的逻辑结构是指(数据的组织形式,即数据元素...