黑马程序员技术交流社区

标题: 集合中重复元素的问题!求解 [打印本页]

作者: 思维    时间: 2014-8-24 14:17
标题: 集合中重复元素的问题!求解
本帖最后由 思维 于 2014-8-24 16:58 编辑

今天写了一个集合去除重复元素的代码!为什么得不到正确的结果啊?
  1. import java.util.*;
  2. class Person{
  3.         private String name;
  4.         private int age;
  5.         Person(String name,int age){
  6.                 this.name = name;
  7.                 this.age = age;
  8.         }
  9.         public boolean equals(Object obj){
  10.                 if(obj instanceof Person)
  11.                         return false;
  12.                 Person p = (Person)obj;
  13.                 return this.name.equals(p.name)&&this.age==p.age;
  14.         }
  15.         public String getName(){
  16.                 return name;
  17.         }
  18.         public int getAge(){
  19.                 return age;
  20.         }
  21. }
  22. class Test{
  23.         public static void main(String[] args){
  24.                 ArrayList<Person> al = new ArrayList<Person>();
  25.                 al.add(new Person("zhangsan",19));
  26.                 al.add(new Person("lisi",32));
  27.                 al.add(new Person("wangwu",12));
  28.                 al.add(new Person("zhangsan",19));
  29.                 Iterator<Person> it = al.iterator();
  30.                 while(it.hasNext()){
  31.                         Person p = (Person)it.next();
  32.                         System.out.println(p.getName()+"..."+p.getAge());
  33.                 }
  34.                 System.out.println("---------------------");
  35.                 ArrayList<Person> newAl = singleElement(al);
  36.                 Iterator ite = newAl.iterator();
  37.                 while(ite.hasNext()){
  38.                         Person p = (Person)ite.next();
  39.                         System.out.println(p.getName()+"..."+p.getAge());
  40.                 }
  41.         }
  42.         private static ArrayList<Person> singleElement(ArrayList<Person> al){
  43.                 ArrayList<Person> newAl = new ArrayList<Person>();
  44.                 Iterator<Person> it = al.iterator();
  45.                 while(it.hasNext()){
  46.                         Person p = (Person)it.next();
  47.                         if(!newAl.contains(p)){                                
  48.                                 newAl.add(p);
  49.                         }
  50.                 }
  51.                 return newAl;
  52.         }
  53. }
复制代码



作者: Huberry    时间: 2014-8-24 15:20
没注释看着好难受{:3_49:}

  1.         public boolean equals(Object obj){
  2.                 if(!(obj instanceof Person))//条件反了
  3.                         return false;
  4.                 Person p = (Person)obj;
  5.                 return this.name.equals(p.name)&&this.age==p.age;
  6.         }
复制代码

作者: 思维    时间: 2014-8-24 16:57
Huberry 发表于 2014-8-24 15:20
没注释看着好难受

晕!自己找错误确实很难啊!:L
作者: wwfkofufo    时间: 2014-8-24 17:25
话说,我没发现错误啊。。。是不是contains的方法使用错了?!
作者: 思维    时间: 2014-8-24 17:28
wwfkofufo 发表于 2014-8-24 17:25
话说,我没发现错误啊。。。是不是contains的方法使用错了?!

看沙发注释!
作者: 格子、    时间: 2014-8-24 20:43
建议楼主养成注释的好习惯




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2