要向集合中添加不重复的对象
但这些对象是每次新生成的,如下
class xx
{
  public xx(int i)
  { 
  }
}public class tt
{
 public void static main(){ 
  HashSet h=new HashSet();
  int i=11000;
  while(i-->0)
  {
    xx x=new xx(得到的整形参数);
    if(!h.contains(x))
   {
      h.add(x); 
    }  }
}
}因为x是每次都新生成的,所以即使它们的参数是一样的,也不是同一个实例,因此h还是把它加进去了,我希望如果已经有相同参数的xx实例了就不添加,望高手指点应该怎么做?问题是h中所添加的对象数应该是很多的,循环判断效率太低,不知道还有什么好办法

解决方案 »

  1.   

    import java.util.*;public class T060428 { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    HashSet<TT> set = new HashSet<TT>();
    set.add(new TT(1));
    set.add(new TT(2));
    System.out.println(set);
    set.add(new TT(1));
    System.out.println(set); }}class TT{
    int a;
    public TT(int a){
    this.a = a;
    }

    public int hashCode(){
    return a;
    }

    public boolean equals(Object o){
    return o instanceof TT ? ((TT)o).a==a : false;
    }

    public String toString(){
    return ""+a;
    }
    }
      

  2.   

    set本来就是存放不重复的reference的,这个不重复需要在你equals方法中定义,也就是你怎么定义这个类的实例是相等的还是不相等的
    另外HashSet则需要定义hashCode,有关用到Hash容器的一般都把hashCode override比较好
      

  3.   

    重写equals然后就可以用一般的容器了。
      

  4.   

    HashSet可以保证加入的对象实例的不重复,但是对象怎样才算不重复得你自己定义,一般java类都有equals方法用来判断两个对象实例是否相同,但很多情况下都是直接比较引用地址,像你说的那种情况得重写xx类得equals方法
      

  5.   

    Set体系的类可以实现不存在重复元素
      

  6.   

    HashSet可以保证加入的对象实例的不重复,但是对象怎样才算不重复得你自己定义,一般java类都有equals方法用来判断两个对象实例是否相同,但很多情况下都是直接比较引用地址,像你说的那种情况得重写xx类得equals方法