功能:去除ArrayList中的重复元素
import java.util.ArrayList;
import java.util.Iterator;
public class ArrayListDemo{
public static void main(String[] args){
ArrayList al=new ArrayList();
al.add("abc1");
al.add("abc2");
al.add("abc2");
al.add("abc1");
al.add("abc");
System.out.println(al);
al=getSingleElement(al); //获取不重复的元素
System.out.println(al);
}
public static ArrayList getSingleElement(ArrayList al){
//定义一个临时容器
ArrayList temp=new ArrayList();
//迭代al集合
Iterator it=al.iterator();
while(it.hasNext()){
Object obj=it.next();
//判断被迭代到的元素是否在临时容器中存在
if(!temp.contains(obj)){
temp.add(obj);
}
}
return temp; //返回这个临时容器
}
}
运行结果:
当我们在集合中存储的对象不是字符串,而是自定义对象时:
package text;
import java.util.ArrayList;
import java.util.Iterator;
class Person{
String name;
int age;
public Person(){
super();
}
public Person(String name,int age){
super();
this.name=name;
this.age=age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public boolean equals(Object obj){ //复写equals,不需重写hashCode
if(this==obj) return true;
if(!(obj instanceof Person)) //判断obj对象是否是Person类的一个实例
throw new ClassCastException("类型错误"); //输入类型错误
Person p = (Person)obj;//强制转换
return this.name.equals(p.name) && this.age==p.age; //说明姓名和年龄相同则为同一元素
}
}
public class ArrayListDemo{
public static void main(String[] args){
ArrayList al=new ArrayList();
al.add(new Person("lisi1",21));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
al.add(new Person("lisi4",24));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
System.out.println(al);
al=getSingleElement(al); //获取不重复的元素
System.out.println(al);
}
public static ArrayList getSingleElement(ArrayList al){
//定义一个临时容器
ArrayList temp=new ArrayList();
//迭代al集合
Iterator it=al.iterator();
while(it.hasNext()){
Object obj=it.next();
//判断被迭代到的元素是否在临时容器中存在
if(!temp.contains(obj)){ //contains使用的是equals方法,所以要重写
temp.add(obj);
}
}
return temp; //返回这个临时容器
}
}
运行结果:
注:在结果中出现text.Person是因为我在自己的程序中导入了自定义的包text。在没有导入包的情况下,结果就直接是Person@...
出现的结果不是 我们期望能直接反映程序功能的,可以再做出修改:
package text;
import java.util.ArrayList;
import java.util.Iterator;
class Person{
String name;
int age;
public Person(){
super();
}
public Person(String name,int age){
super();
this.name=name;
this.age=age;
}
public String getName(){
return name;
}
public void setName(String name){
this.name=name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age=age;
}
public boolean equals(Object obj){ //复写equals,不需重写hashCode
if(this==obj) return true;
if(!(obj instanceof Person)) //判断obj对象是否是Person类的一个实例
throw new ClassCastException("类型错误"); //输入类型错误
Person p = (Person)obj;//强制转换
return this.name.equals(p.name) && this.age==p.age; //说明姓名和年龄相同则为同一元素
}
}
public class ArrayListDemo{
public static void main(String[] args){
ArrayList al=new ArrayList();
al.add(new Person("lisi1",21));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
al.add(new Person("lisi4",24));
al.add(new Person("lisi2",22));
al.add(new Person("lisi3",23));
// System.out.println(al);
al=getSingleElement(al); //获取不重复的元素
Iterator it=al.iterator();
while(it.hasNext()){
Person p=(Person)it.next();
System.out.println(p.getName()+":"+p.getAge());
}
}
public static ArrayList getSingleElement(ArrayList al){
//定义一个临时容器
ArrayList temp=new ArrayList();
//迭代al集合
Iterator it=al.iterator();
while(it.hasNext()){
Object obj=it.next();
//判断被迭代到的元素是否在临时容器中存在
if(!temp.contains(obj)){ //contains使用的是equals方法,所以要重写
temp.add(obj);
}
}
return temp; //返回这个临时容器
}
}
结果:
没有重复的元素出现