黑马程序员技术交流社区
标题:
删除ArrayList中重复的元素
[打印本页]
作者:
qq8921310
时间:
2014-12-8 19:08
标题:
删除ArrayList中重复的元素
我自己用循环写的。
import java.util.ArrayList;
public class ArrayListTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
ArrayList al = new ArrayList();
al.add(new Person("zhangsan",20));
al.add(new Person("lisi",21));
al.add(new Person("wangwu",22));
al.add(new Person("zhaoliu",23));
al.add(new Person("lisi",21));
al.add(new Person("wangwu",22));
al.add(new Person("zhaoliu",23));
System.out.println(al);
single(al);
System.out.println(al);
}
public static void single(ArrayList al)
{
if(al.isEmpty())
System.out.println("传入数组为空,请检查");
else
for(int i = 0 ; i<al.size()-1;i++)
{
for(int j = i+1;j<al.size();j++)
{
if(al.get(i).equals(al.get(j)))//循环中。如果equals值相等就删除元素
al.remove(j);
}
}
}
}
class Person
{
String name;
int age;
public Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
return this.age == p.age && this.name.equals(p.name);
}
public String toString()
{
return name+" "+age;
}
}
复制代码
当if(al.get(i).equals(al.get(j)))//循环中。如果equals值相等就删除元素
al.remove(i);
不能正确删除最后一个重复的对象为什么。实在是想不明白
作者:
wf111sxwf
时间:
2014-12-8 22:12
集合中移除元素的时候会改变集合的长度,当你删除元素的时候 你的 J 和 I还在自增而集合的长度al.size()
在变小,所以当你移除了两个重复元素的时候 内循环的j 的取值已经不满足循环条件了,循环就会结束,因此你的最后一个重复元素是移除不了的。我在自己做 约瑟夫环的时候也遇到了这样的问题。
作者:
wangcongwu
时间:
2014-12-8 23:23
大哥恕我直言,你写两个for根本就是浪费资源,你不就是打算从角标0的位置知道末尾和剩下的挨个比,你完全可以用快速排序的算法来弄啊,分治算法快并且也不出毛病,你去查查快速排序吧
作者:
康师傅-蛋黄派
时间:
2014-12-9 00:44
想删去重复的,把数据存入TreeSet集合中转一下就可以了
作者:
lwh316658735
时间:
2014-12-9 09:56
用contains(Object o)方法来判断是否重复更佳,提高效率
作者:
爱吃小土豆
时间:
2014-12-9 13:51
public class Demo {
public static void main(String[] args) {
List<String> list1=new ArrayList<String>();
list1.add("abc");
list1.add("abc");
list1.add("aaa");
list1.add("bbb");
list1.add("ccc");
list1.add("abc");
List<String> list2=new ArrayList<String>();
for (String string : list1) {
if (!list2.contains(string)) {
list2.add(string);
}
}
System.out.println(list2);
}
}
建两个集合,遍历第一个集合,如果第2个集合没有第1个集合的元素,第2个集合添加那个元素
作者:
情天不雨
时间:
2014-12-9 13:56
将List集合的元素放入Set瞬间搞定
作者:
qq8921310
时间:
2014-12-10 10:40
wf111sxwf 发表于 2014-12-8 22:12
集合中移除元素的时候会改变集合的长度,当你删除元素的时候 你的 J 和 I还在自增而集合的长度al.size()
...
Thanks 想听到的就是这个答案
作者:
bjuth
时间:
2014-12-10 11:32
好像确实是扔到Set里更简单 还有更简单的方法吗?实际开发怎么做?
作者:
xingyunjunjun
时间:
2014-12-10 11:38
我也看不明白
作者:
農邨尛夥兒
时间:
2014-12-10 22:08
努力学习中
作者:
小凡_fly
时间:
2014-12-10 22:23
支持六楼
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2