A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© xp8812 中级黑马   /  2014-6-17 15:10  /  1394 人查看  /  10 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

大家有什么好办法删除掉List中的重复数据,剩余数据顺序不能变?

10 个回复

倒序浏览
本帖最后由 2528870651 于 2014-6-17 15:55 编辑

假如你要存入list集合的是一个Person对象,那么在Person类里面重写equals函数,如:
  1. public boolean equals(Object obj){
  2.                 if(!(obj instanceof Person))
  3.                         return false;
  4.                 Person p = (Person)obj;
  5.                 return this.name.equals(p.name) && this.age == p.age;
  6.         }
复制代码

然后你可以自己根据上面的函数再写个函数,再来删除

这是我上午写的程序,我也在学这里,
  1. package it.heima.com.collection;

  2. import java.util.ArrayList;
  3. import java.util.Iterator;

  4. /*
  5. 将自定义对象作为元素存到ArrayList集合中,并去除重复元素。
  6. 比如:存人对象。同姓名同年龄,视为同一个人。为重复元素。

  7. 思路:
  8. 1,对人描述,将数据封装进人对象。
  9. 2,定义容器,将人存入。
  10. 3,取出。

  11. List集合判断元素是否相同,依据是元素的equals方法。
  12. */
  13. public class ArrayListTest {
  14.         public static void main(String[] args){
  15.                 ArrayList<Person> al = new ArrayList<Person>();
  16.                 al.add(new Person());
  17.                 al.add(new Person("zhangsan01",20));
  18.                 al.add(new Person("zhangsan02",21));
  19.                 al.add(new Person("zhangsan03",22));
  20.                 al.add(new Person("zhangsan04",23));
  21.                 al.add(new Person("zhangsan05",24));
  22.                 al.add(new Person("zhangsan01",20));

  23.                 al = singleElement(al);
  24.                 Iterator<Person> it = al.iterator();
  25.                 while(it.hasNext()){
  26.                         Person p = (Person)it.next();
  27.                         sop(p.getName()+"::"+p.getAge());
  28.                 }

  29.                
  30.         }
  31.         public static ArrayList<Person> singleElement(ArrayList<Person> al){
  32.                 //定义一个临时容器。
  33.                 ArrayList<Person> newAl = new ArrayList<Person>();

  34.                 Iterator<Person> it = al.iterator();

  35.                 while(it.hasNext()){
  36.                         Person p = it.next();

  37.                         if(!newAl.contains(p))
  38.                                 newAl.add(p);
  39.                 }

  40.                 return newAl;
  41.         }


  42.        
  43.         public static void sop(Object obj){
  44.                 System.out.println(obj);
  45.         }
  46. }
复制代码
  1. package it.heima.com.collection;

  2. public class Person {
  3.         private String name;
  4.         private int age;
  5.        
  6.         Person(){
  7.                
  8.         }
  9.         Person(String name, int age){
  10.                 this();
  11.                 this.name = name;
  12.                 this.age = age;
  13.         }
  14.        
  15.         public String getName() {
  16.                 return name;
  17.         }
  18.         public void setName(String name) {
  19.                 this.name = name;
  20.         }
  21.         public int getAge() {
  22.                 return age;
  23.         }
  24.         public void setAge(int age) {
  25.                 this.age = age;
  26.         }
  27.        
  28.         public boolean equals(Object obj){
  29.                 if(!(obj instanceof Person))
  30.                         return false;
  31.                 Person p = (Person)obj;
  32.                 return this.name.equals(p.name) && this.age == p.age;
  33.         }
  34.        
  35. }
复制代码




评分

参与人数 1技术分 +1 收起 理由
SyouRai_Tsk + 1

查看全部评分

回复 使用道具 举报 1 0
把list的元素存入另一个List中,存入时判断是否已经contains
回复 使用道具 举报
扔进set里去
回复 使用道具 举报
如果是自定义元素的话就要复写equals如果不是自定义的话就不用。调用contains 时就会自动调用equals
回复 使用道具 举报
你是要保留重复的第一个数据呢 还是后面的某一个 还是重复的都不要了啊
你想要数据中没有重复数据最好的办法就是用set集合来存放数据啊  他直接就把重复数据给筛选掉了
何必用list存了后在删除重复数据 太麻烦了
回复 使用道具 举报
删除ArrayList中重复元素,保持顺序
  1. public static void removeDuplicateWithOrder(List list) {
  2.    Set set = new HashSet();
  3.    List newList = new ArrayList();
  4.    for (Iterator iter = list.iterator(); iter.hasNext();) {
  5.           Object element = iter.next();
  6.           if (set.add(element))
  7.              newList.add(element);
  8.        }
  9.       list.clear();
  10.       list.addAll(newList);
  11.      System.out.println( " remove duplicate " + list);
  12. }
复制代码

如果用HashSet的话,如果是对象,则要将对象实现equals和hashCode方法
跪求技术分
回复 使用道具 举报
放到LinkedHashSet里面,再拿出来
回复 使用道具 举报
xp8812 中级黑马 2014-6-18 13:27:11
9#

扔到Set里顺序就变了
回复 使用道具 举报
Aron 发表于 2014-6-17 19:29
你是要保留重复的第一个数据呢 还是后面的某一个 还是重复的都不要了啊
你想要数据中没有重复数据最好的办 ...

Set以后没有顺序了
回复 使用道具 举报
xp8812 发表于 2014-6-18 13:28
Set以后没有顺序了

LinkedHashSet
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马