本帖最后由 梁志冰 于 2012-9-8 10:30 编辑
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
public class ArrayListTest3 {
/**
* @param args
*/
public static void main(String[] args) {
Person p0=new Person("gekui",22);
Person p1=new Person("gekui",22);
Person p2=new Person("gekui",22);
Person p3=new Person("gekui",23);
Person p4=new Person("wf",22);
Person p5=new Person("gekui",22);
ArrayList al=new ArrayList();
al.add(p0);
al.add(p1);
al.add(p2);
al.add(p3);
al.add(p4);
al.add(p5);
// 打印容器al的内容
sop(al);
sop("");
// 调用方法,去除容器中重复元素,并打印
sop(removeSameP(al));
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static ArrayList removeSameP(ArrayList al)
{
/*
//建立一个新的容器
ArrayList newAl=new ArrayList();
// 将容器al中的0号角标元素存入newAl容器中
newAl.add(al.get(0));
// for(Iterator it=al.iterator();;it.hasNext())结束条件的位置放错了,导致死循环
for(Iterator it=al.iterator();it.hasNext();)
{
Object obj=it.next();
Person p=(Person)obj;
// for(ListIterator newIt=newAl.listIterator();;newIt.hasNext())结束条件的位置放错了,导致死循环
//这里每一次都从新遍历newAl容器的中的元素,与al容器的取出元素比较,会出现重复 。例如当newAl中有("wf",22)元素,那么
//当al容器取出("gekui",22)元素时,比较条件是成立的,则newAl中会存储进去,就造成了重复
for(ListIterator newIt=newAl.listIterator();newIt.hasNext();)
{
Object newObj=newIt.next();
Person newP=(Person)newObj;
if(p.getName()!=newP.getName()||p.getAge()!=newP.getAge())
newIt.add(obj);
}
}
return newAl;
*/
//稍微修改了一下程序,希望对你有帮助!当然,这种方式仅仅针对同一类型元素
Object obj1;
Object obj2;
Person p;
Person p2;
Iterator it=al.iterator();
for(int i=0;i<al.size();i++){
obj1=al.get(i);
p=(Person)obj1;
for(int j=i+1;j<al.size();j++){
obj2=al.get(j);
p2=(Person)obj2;
// 如果元素重复,删除重复元素
if(p.getName()==p2.getName()&&p.getAge()==p2.getAge()){
al.remove(j);
//如果删除,角标减1,保证遍历的完整性。
j=j-1;
}
}
}
return al;
}
}
class Person{
private String name;
private int 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 Person(String name, int age) {
super();
this.name = name;
this.age = age;
}
@Override
public String toString() {
return name + "::::" + age ;
}
}
|