HashSet内部就是使用Hashmap实现的,和Hashmap不同的是它不需要Key和Value两个值往hashset中插入对象其实只不过是内部做了
    public boolean add(Object o) {
return map.put(o, PRESENT)==null;
    }
而已

解决方案 »

  1.   

    1.HashMap为散列映射,它是基于hash table的一个实现,它可在常量时间内安插元素,或找出一组key-value pair.
      HashSet为散列集,它把查找时间看的很重要,其中所有元素必须要有hashCode().
    2.个人认为,它们好象都是用的线性链表来解决散列码冲突的.即一个hashCode并不直接指向某个value,而是指向一串values.这些values以线性方式通过equals()方式进行查找.
      

  2.   

    1.HashSet只是HashMap的一个视图,也就是HashSet是通过HashMap实现的。
    2.对于冲突,HashMap是用链表来实现的,就是hashCode相同的话就肯定在一个链表上,不过
    在同一个链表上的不一定hashCode相同!
    可以参考:
    http://blog.csdn.net/treeroot/archive/2004/09/20/111104.aspx
    http://blog.csdn.net/treeroot/archive/2004/09/21/112246.aspx
    http://blog.csdn.net/treeroot/archive/2004/09/21/112283.aspx
    希望对你有一点帮助