如何高效判断集合中‘对象重复‘

jjojojj 2006-04-28 12:32:50
要向集合中添加不重复的对象
但这些对象是每次新生成的,如下
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中所添加的对象数应该是很多的,循环判断效率太低,不知道还有什么好办法
...全文
425 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jjojojj 2006-04-29
  • 打赏
  • 举报
回复
谢谢,在各位的帮助下已经解决了:)
believefym 2006-04-28
  • 打赏
  • 举报
回复
override hashCode(),equals()
贝壳鱼 2006-04-28
  • 打赏
  • 举报
回复
应该没什么好办法吧,要你把每次存入的对象添加一些标识,放在数组中,每次对数组遍历,也许会节省点消耗
lcllcl987 2006-04-28
  • 打赏
  • 举报
回复
HashSet可以保证加入的对象实例的不重复,但是对象怎样才算不重复得你自己定义,一般java类都有equals方法用来判断两个对象实例是否相同,但很多情况下都是直接比较引用地址,像你说的那种情况得重写xx类得equals方法
网络咖啡 2006-04-28
  • 打赏
  • 举报
回复
Set体系的类可以实现不存在重复元素
qingyuan18 2006-04-28
  • 打赏
  • 举报
回复
HashSet可以保证加入的对象实例的不重复,但是对象怎样才算不重复得你自己定义,一般java类都有equals方法用来判断两个对象实例是否相同,但很多情况下都是直接比较引用地址,像你说的那种情况得重写xx类得equals方法
jichongchong 2006-04-28
  • 打赏
  • 举报
回复
override hashCode(),equals()
捏造的信仰 2006-04-28
  • 打赏
  • 举报
回复
重写equals然后就可以用一般的容器了。
treeroot 2006-04-28
  • 打赏
  • 举报
回复
重复是什么意思??
哪里来的重复?你不定义自己的判断规则,机器怎么可能知道你所认为的重复?
xingshi11 2006-04-28
  • 打赏
  • 举报
回复
hashSet()可以实现
believefym 2006-04-28
  • 打赏
  • 举报
回复
set本来就是存放不重复的reference的,这个不重复需要在你equals方法中定义,也就是你怎么定义这个类的实例是相等的还是不相等的
另外HashSet则需要定义hashCode,有关用到Hash容器的一般都把hashCode override比较好
believefym 2006-04-28
  • 打赏
  • 举报
回复
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;
}
}

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧