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]]