TreeSet 里可以插入重复元素嘛
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; } }