移除ArrayList中的重复元素
2016-08-26 16:34
423 查看
去重ArrayList思路:
创建一个新的空ArrayList,遍历原list的每一个元素,如果新list中无该元素就添加。
备注1:
如果是自定义对象去重,则需要重写自定义对象的 equals方法,否则,将按Object的equals判断,也就是地址判断。
这样可能就没有意义,比如需求:自定义Person对象,Person里面有姓名和年龄,如果姓名年龄相等,我们判断为相同,用原来的object的equals方法则不行。
备注2:
备注2可不看。
collection的contains方法比较如下:
ArrayList中的contains(Object obj)方法,底层实现判断是equals。
底层实现思路:将obj,拿出来根据obj的equals方法,遍历判断list中的元素,看是否有相等的情况存在,同时注意多态的存在,obj可能是某个对象,已经把equals重写了,因此会执行子类的equals判断方法。
HashSet里面的contains方法,底层首先根据hashCode值判断,如果hashCode不同,则不同,如hashCode相同,则再判断equals
TreeSet比较特殊,因为有排序的存在,contains方法底层判断的是对象实现Comparable接口的compareTo(T o) 方法,但如果构造函数是TreeSet(Comparator c) 时,则应传实现Comparator接口的对象,也就是比较器,这个比较器属于TreeSet,如果不传比较器,会按照内部元素的顺序比较器进行排序,如果传比较器,则按照比较器内的方法。
移除ArrayList中自定义对象的重复元素Demo如下:
备注:该例子适用于普通对象(如String)去重,自定义对象去重,以及普通对象与自定义对象混合去重。混合去重可以测试:在例子中的原list中再加入两个相同内容的String对象。能够这么去重的原因看备注2,arrayList的contains方法介绍。
创建一个新的空ArrayList,遍历原list的每一个元素,如果新list中无该元素就添加。
备注1:
如果是自定义对象去重,则需要重写自定义对象的 equals方法,否则,将按Object的equals判断,也就是地址判断。
这样可能就没有意义,比如需求:自定义Person对象,Person里面有姓名和年龄,如果姓名年龄相等,我们判断为相同,用原来的object的equals方法则不行。
备注2:
备注2可不看。
collection的contains方法比较如下:
ArrayList中的contains(Object obj)方法,底层实现判断是equals。
底层实现思路:将obj,拿出来根据obj的equals方法,遍历判断list中的元素,看是否有相等的情况存在,同时注意多态的存在,obj可能是某个对象,已经把equals重写了,因此会执行子类的equals判断方法。
HashSet里面的contains方法,底层首先根据hashCode值判断,如果hashCode不同,则不同,如hashCode相同,则再判断equals
TreeSet比较特殊,因为有排序的存在,contains方法底层判断的是对象实现Comparable接口的compareTo(T o) 方法,但如果构造函数是TreeSet(Comparator c) 时,则应传实现Comparator接口的对象,也就是比较器,这个比较器属于TreeSet,如果不传比较器,会按照内部元素的顺序比较器进行排序,如果传比较器,则按照比较器内的方法。
移除ArrayList中自定义对象的重复元素Demo如下:
备注:该例子适用于普通对象(如String)去重,自定义对象去重,以及普通对象与自定义对象混合去重。混合去重可以测试:在例子中的原list中再加入两个相同内容的String对象。能够这么去重的原因看备注2,arrayList的contains方法介绍。
package com.zyf.test.collection; import java.util.ArrayList; import java.util.Iterator; public class DelSameListTest { public static void main(String[] args) { Person p1 = new Person("张三",10); Person p2 = new Person("张三",10); Person p3 = new Person("李四",10); ArrayList list = new ArrayList(); list.add(p1); list.add(p2); list.add(p3); ArrayList removelist = removeSimple(list); for(Iterator it = removelist.listIterator();it.hasNext();){ System.out.println(it.next().toString()); } } public static ArrayList removeSimple(ArrayList list){ ArrayList newlist = new ArrayList(); Iterator it = list.listIterator(); while(it.hasNext()){ Object obj = it.next(); if(!newlist.contains(obj)) newlist.add(obj); } return newlist; } } class Person{ private String name; private int age; Person(String name,int age){ this.name = name; this.age = age; } 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 9e6e boolean equals(Object obj) { if(!(obj instanceof Person)) throw new RuntimeException() ; Person p = (Person)obj; if(this.name.equals(p.getName())&& (this.age == p.getAge())) return true; return false; } @Override public String toString() { return "人物:"+this.name+"年龄:"+this.age; } }
相关文章推荐
- 移除ArrayList集合中重复的元素
- Java删除ArrayList中的重复元素
- Java删除ArrayList中的重复元素的2种方法
- Remove Duplicates from Sorted List(移除有序链表的重复元素)
- leetcode 4. 移除有序数组中的重复元素 Remove Duplicates from Sorted Array
- ArrayList 的删除重复元素以及删除
- Java编程:定义功能去除ArrayList中的重复元素
- [LeetCode-26] Remove Duplicates from Sorted Array(移除数组重复元素)
- 移除链表中重复元素
- 计蒜客 重复元素移除问题
- 黑马程序员——ArrayList集合去除重复元素
- 去除ArrayList中的重复元素
- Java将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
- Java删除ArrayList中的重复元素的2种方法
- (有序数组中移除重复元素)Remove Duplicates from Sorted Array
- 两种方法删除ArrayList里重复元素
- 删除ArrayList中重复元素
- 黑马程序员——去除ArrayList中重复的元素
- ArrayList联系二------自定义对象,然后去除重复元素
- 【计蒜客系列】挑战难题11:移除数组中重复元素