mysql - java的List中有没有提供list去除重复项的API方法,查了下JDK貌似没有
巴扎黑
巴扎黑 2017-04-18 09:20:54
[Java讨论组]

如题:

java的List中有没有提供list去除重复项的API方法,查了下JDK貌似没有?忘了补充了,我是去除重复的内容。

统一回复:
基本数据类型的去重可以用你们提供的方法,但是对象的去重还需要一个个的遍历迭代。难道不是么?

巴扎黑
巴扎黑

全部回复(6)
天蓬老师

只能说没有直接的API去删除重复项,但利用HashSet不能包含重复项,可以去除list的重复项。

public static void removeDuplicate(List list) {
      HashSet h = new HashSet(list);
      list.clear();
      list.addAll(h);
      System.out.println(list);
}

上面这个方法能去除List的重复项,但List原来的顺序会被打乱。如果不想在去除重复项的时候,还想保持原有的顺序,则可以用下面这种方式:

public static void removeDuplicateWithOrder(List list) {
   Set set = new HashSet();
   List newList = new ArrayList();
   for (Iterator iter = list.iterator(); iter.hasNext();) {
          Object element = iter.next();
          if (set.add(element))
             newList.add(element);
   }
   list.clear();
   list.addAll(newList);
   System.out.println(list);
 }

参考这里

巴扎黑

没有直接的API
建议这样:

List<Integer> list = ...;
list = new ArrayList<Integer>(new HashSet<Integer>(list));

补充,看了楼主的代码,要实现去除有相同name和sex的内容,需要重写equals和hashcode方法,用eclipse的话直接generat code里面选hashcode和equals,然后选择name和sex属性,生成就可以了
hashcode和equals的关系和用处参考这里
去重并遍历的代码改成

for (Person p : new HashSet<Person>(list)) {
    System.out.println(p.toString());
}
PHP中文网

不想要重复项,应该用Set吧,干嘛用List

补充:

拿自己写一个也不累,来来来:

List<String> origin = new ArrayList<>();

Set<String> handle = new HashSet<>();

//把origin里的所有元素放进handle去,因为handle是Set类,会自动去重
handle.addAll(al);

//把origin清空
origin.clear();

//再从handle里把去重之后的内容都放回origin里
origin.addAll(handle);

这下你就high至了

ringa_lee

java.util.Set里的项是不可以重复的,你可以利用这一点来去重

PHP中文网

通过Set来实现,有很多方法可以选择

PHPz

treeSet可以去重且保证顺序

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号