TreeSet 里可以插入重复元素嘛

yingShisscWang yingShisscWang 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
1)通常set中不能插入重复元素(几乎所有的人都这么说),但是到底什么是重复元素?(和equals方法和hashcode返回值有关嘛)
2)所有的Set实现都是如此嘛,比如HashSet或者TreeSet都是如此嘛?
3)下面的代码是关于一个自定义类VO,我实例化了两个VO,让他们的equals方法,和hashcode方法返回值相同.但是他们还是插入了两次.


public static void main(String[] args){
Set aset = new TreeSet();
VO avo1 = new VO(1);
VO avo2 = new VO(3);

if(avo1.equals(avo2)){
System.out.println("equals:" + true);
}

if(avo1.hashCode() == avo2.hashCode()){
System.out.println("hashcode:" + true);
}

aset.add(avo1);
aset.add(avo2);

Iterator it = aset.iterator();
while(it.hasNext()){
VO show = (VO)it.next();
System.out.println(show.toString());
}
}




public class VO implements Comparable{
private int name;


public VO(int name){
this.name = name;
}

@Override
public boolean equals(Object obj) {
VO vo = (VO)obj;//比较余数
if(this.hashCode() - vo.hashCode()==0){
return true;
}
return false;
}

@Override
public int hashCode() {
// TODO Auto-generated method stub
return name%2;//取余数
}

@Override
public int compareTo(Object obj) {

return this.name - ((VO)obj).name;
}

@Override
public String toString() {
// TODO Auto-generated method stub
return "name:" + name;
}


}



返回结果如下
equals:true
hashcode:true
name:1
name:3




...全文

相关推荐

评论 7
收藏 已收藏
分享
返回顶部
yingShisscWang
Java SE 62,620 成员 307,251 内容