日期:2014-05-20 浏览次数:20647 次
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,则不添加;否则,添加
------解决方案--------------------