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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

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

10 个回复

正序浏览
xp8812 发表于 2014-6-18 13:28
Set以后没有顺序了

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

Set以后没有顺序了
回复 使用道具 举报
xp8812 中级黑马 2014-6-18 13:27:11
9#

扔到Set里顺序就变了
回复 使用道具 举报
放到LinkedHashSet里面,再拿出来
回复 使用道具 举报
删除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方法
跪求技术分
回复 使用道具 举报
你是要保留重复的第一个数据呢 还是后面的某一个 还是重复的都不要了啊
你想要数据中没有重复数据最好的办法就是用set集合来存放数据啊  他直接就把重复数据给筛选掉了
何必用list存了后在删除重复数据 太麻烦了
回复 使用道具 举报
如果是自定义元素的话就要复写equals如果不是自定义的话就不用。调用contains 时就会自动调用equals
回复 使用道具 举报
扔进set里去
回复 使用道具 举报
把list的元素存入另一个List中,存入时判断是否已经contains
回复 使用道具 举报
本帖最后由 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
您需要登录后才可以回帖 登录 | 加入黑马