日期:2014-05-20  浏览次数:20647 次

遇到一个Set装入重复元素的问题
遇到一个蛋疼的问题,明知道是错的,但是不知道该怎么
Java code

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中不能存放重复的元素这一说法是不完善的   
  
    }   
}  

反驳,代码贴在这里,望大神看一下,特别是写的这个hashCode方法。

------解决方案--------------------
Java code

// set在存储数据时需要遍历之前所存放的数据(hashCode与内存地址),用于与当前所要添加的元素进行对比。若得出结果相等,   
        // 则不添加。比较的方法是:首先比较两个对象的hashCode,如果不相等,则直接添加;否则,再用equals()(比较地址)   
        // 方法进行比较,如果结果返回为true,则不添加;否则,添加

------解决方案--------------------
探讨
引用:

import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/*
class AddObject {
int hashCode;

public AddObject(int hashCode) {

this.hashCode =………