A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱成 中级黑马   /  2012-9-8 07:53  /  1087 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邱成 于 2012-9-8 21:18 编辑

**
将自定义的对象作为元素存入ArrayList集合中,并去除重复元素
比如:存人对象.把同名同年龄的视为同一对象,是重复元素
*/

import java.util.*;
class  ArrayListTest3
{
         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);

    sop(al);
    sop("");
                sop(removeSameP(al));
         }
         public static ArrayList removeSameP(ArrayList al)
         {
                 ArrayList newAl=new ArrayList();
                 newAl.add(al.get(0));
                 for(Iterator it=al.iterator();;it.hasNext())
                 {
                         Object obj=it.next();
                         Person p=(Person)obj;

                        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;
         }
         public static void sop(Object obj)
         {
                 System.out.println(obj);
         }
}
class Person
{
         private String name;
         private int age;
         Person(String name,int age)
         {
                 this.name=name;
                 this.age=age;
         }
         public void setAge(int age)
         {
                 this.age=age;
         }
         public void setName(String name)
         {
                 this.name=name;
         }
         public int getAge()
         {
                 return this.age;
         }
         public String getName()
         {
                 return this.name;
         }
   public String toString(){
   return name+"::::"+age;
   }

}
java问题,为什么打印不出我想要的结果,还是有很多重复对象

2 个回复

倒序浏览
程序本身就有问题
回复 使用道具 举报
本帖最后由 梁志冰 于 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 ;
}
}

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马