日期:2014-05-20 浏览次数:20839 次
public class AddObject {
int hashCode;
public AddObject(int hashCode) {
this.hashCode = hashCode;
}
public int hashCode() {
return hashCode;
}
}
public class TestHashSet {
public static void main(String args[]) {
// set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,
// 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)
// 方法进行比较,如果结果返回为true,则不添加;否则,添加
Set<AddObject> set = new HashSet<AddObject>();
// 设置初始hashCode值
AddObject ao = new AddObject(2);
// 第一次添加
set.add(ao);
AddObject ao2= ao;
// 重新设置hashCode
ao2.hashCode=3;
System.out.println(ao.equals(ao2));
// 再次添加
set.add(ao2);
Iterator iter = set.iterator();
while(iter.hasNext()){
AddObject aoTest = (AddObject)iter.next();
System.out.println(aoTest.hashCode+"xxx ");
}
System.out.println(ao.equals(ao2));
System.out.println(set.size());
// 输出结果显然是2。但两次添加的对象显然是同一个对象,所以Set中不能存放重复的元素这一说法是不完善的
}
}
// set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,
// 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)
// 方法进行比较,如果结果返回为true,则不添加;否则,添加
------解决方案--------------------