黑马程序员技术交流社区

标题: 泛型自定义对象的equlas怎么写?求助,搞不定了.... [打印本页]

作者: 常万    时间: 2012-4-23 16:04
标题: 泛型自定义对象的equlas怎么写?求助,搞不定了....
import java.util.*;
public class CollcetionTest {
  public static void main(String[] args)
  {
   
   HashSet<People> hs = new HashSet<People>();
   hs.add(new People("zhangsan001",21));
   hs.add(new People("zhangsan02",20));
   hs.add(new People("zhangsan003",23));
   hs.add(new People("zhangsan",23));
   hs.add(new People("zhangsan",23));
   for (Iterator<People> it = hs.iterator();it.hasNext() ; )
   {
     People p =it.next();
    System.out.println(p.getName()+"..."+p.getAge());
   }
  
   HashSet<String> hs1 = new HashSet<String>();
   hs1.add("abc01");
   hs1.add("abc03");
   hs1.add("abc02");
   hs1.add("abc03");
   
   printCollection(hs1);
   
  }
  
  public static void printCollection(HashSet<?> hs1)
  {
   for (Iterator<?> it = hs1.iterator();it.hasNext() ; )
   {
   
    System.out.println(it.next());
   }
  }
}
class People<P extends People>                                                                                   
{
  private String name;
  private int age;
  People(String name,int age)
  {
   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;
  }
  //覆写hashCode方法比较
  public int hashCode()
  {
   return name.hashCode()+age*39;
  }
  public boolean equals(P p1)
  {
   //if(!(obj instanceof People))
    //return false;
   //People p = (People)obj;
   //System.out.println(this.name+".....equals"+p.name);
   return this.name.equals(p1.name)&&this.age==p1.age;
  }
}
泛型自定义对象的equlas怎么写?求高手!...怎么写都运行equals方法。。郁闷

作者: 常万    时间: 2012-4-23 17:06
 ̄□ ̄||....equals不能写泛型.....后面有讲到了{:soso_e101:}
作者: 袁培育    时间: 2012-4-23 17:11
你应该是想运行你的equals方法吧。把 public boolean equals(P p1)改为
public boolean equals(Object obj)  {
    if(!(obj instanceof People))
    return false;
   People p1 = (People)obj;
   System.out.println(this.name+".....equals"+p1.name);
   return this.name.equals(p1.name)&&this.age==p1.age;
  }

作者: 常万    时间: 2012-4-23 20:18
袁培育 发表于 2012-4-23 17:11
你应该是想运行你的equals方法吧。把 public boolean equals(P p1)改为
public boolean equals(Object obj ...

哥们,你搞错意思了...不过现在已经知道了:victory:




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