Java集合list删除重复元素问题
来源:互联网 发布:linux 跨机器拷贝文件 编辑:程序博客网 时间:2024/06/05 02:32
1.第一种删除重复元素的方法
为了删除list集合中重复的元素
先看看下面这种方法:(以ArrayList为例)
import java.util.*;public class Main{ public static void main(String args[]) { List list = new ArrayList(); list.add("1"); list.add("4"); list.add("2"); list.add("1"); list.add("4"); list.add("4"); list.add("2"); list.add("1"); for(int x = 0;x<list.size()-1;x++) { Object obj = list.get(x); for(int y = x+1;y<list.size();y++) { if(obj.equals(list.get(y))) { list.remove(y); } } } System.out.println(list); }}//打印结果:[1, 4, 2, 4]可以见到打印结果不如人意,导致错误的原因是:每次调用 remove()后,ArrayList的长度size()就会减一,因此当删除了元素时重新获取的size()值就会减一。导致有些重复的元素不能被检测到。
正确做法是,没次调用remove()删除元素后,都使y-1:
import java.util.*;public class Main{ public static void main(String args[]) { List list = new ArrayList(); list.add("1"); list.add("4"); list.add("2"); list.add("1"); list.add("4"); list.add("4"); list.add("2"); list.add("1"); for(int x = 0;x<list.size()-1;x++) { Object obj = list.get(x); for(int y = x+1;y<list.size();y++) { if(obj.equals(list.get(y))) { list.remove(y); y = y-1; //每次删除一次元素都使y - 1 } } } System.out.println(list); }}//打印结果:[1, 4, 2,]
2.另一种比较方便的删除 list 重复元素的方法:
1.new一个临时 list 容器
2.从待检测的 list 容器中取出一个元素,若该元素不在临时容器中,则添加到临时容器。
3.清空待检测容器
4.把临时容器的元素赋给待检测容器
import java.util.*;public class Main{ public static void main(String args[]) { List list = new ArrayList(); list.add("1"); list.add("4"); list.add("2"); list.add("1"); list.add("4"); list.add("4"); list.add("2"); list.add("1"); List temp = new ArrayList(); for(Iterator it = list.iterator();it.hasNext();) { Object temp_obj = it.next(); if(!temp.contains(temp_obj)) { temp.add(temp_obj); } } list.clear(); list.addAll(temp); System.out.println(list); }}//打印结果:[1, 4, 2]
3.如何删除重复自定义元素
引用上面的方法即可,不过要额外重写 equals()函数 和 toString() 函数。前者用于指定自定义元素比较标准,后者用于指定自定义元素的打印方式:
import java.util.*;class Person{ public String name; public int age; Person(String name,int age) { this.name = name; this.age = age; } public boolean equals(Object obj)//重写equals { Person p = (Person)obj; return this.name.equals(p.name) && this.age == p.age; } public String toString()//重写toString { return ("["+this.name+"',"+this.age+"]"); }}public class Main{ public static void main(String args[]) { List list = new ArrayList(); List temp = new ArrayList(); list.add(new Person("xiaoming",20)); list.add(new Person("xiaohong",21)); list.add(new Person("xiaohong",21)); list.add(new Person("xiaoming",20)); list.add(new Person("xiaoming",20)); for(Iterator it = list.iterator();it.hasNext();) { Object obj = it.next(); if(!temp.contains(obj)) { temp.add(obj); } } list.clear(); list.addAll(temp); System.out.println(list); }}//打印结果:[[xiaoming',20], [xiaohong',21]]
阅读全文
0 0
- Java集合list删除重复元素问题
- Java 集合List删除元素
- java中删除list重复元素
- java中删除list重复元素
- java中删除list重复元素
- java中删除list重复元素
- java删除list中的重复元素
- 删除重复元素,集合
- List删除重复元素
- java 中List 集合删除元素
- List集合删除元素
- java 集合之ArrayList集合元素重复删除
- 删除集合中的重复元素
- c# list 删除重复元素
- list版本删除重复元素
- list版本删除重复元素
- java 删除ArrayList LinkedList集合中的重复元素
- java List删除元素问题及解决办法
- springmvc源码2 这篇写的有问题 会重新写
- 【6月】闲聊
- 死锁
- ML的45问(4)——评估假设、贝叶斯与PAC可学习
- RMQ求区间最值
- Java集合list删除重复元素问题
- [中国剩余定理]Hdu 1573——X问题
- gitlab使用
- C++ 模板的编译与链接
- React-----form(表单)
- 服务器(5)--搭建Solr集群+搭建Zookeeper集群(下篇)
- 排序算法之--选择排序
- HTML笔记3
- Linux学习笔记 --Firewalld