HashSet
存储原理
每次存储对象的时候, 调用该对象的hashCode()方法得到哈希值, 在集合中查找是否有哈希值相同的对象.
如果没有哈希值相同的对象, 直接存入.
如果有哈希值相同的对象, 则和哈希值相同的对象进行equals()比较.
比较结果为false直接存入, 结果为true则不存.
过滤属性相同元素
如果我们希望HashSet能够过滤属性重复的元素, 那么就需要重写hashCode()和equals().
属性相同的对象hashCode()方法要返回同一个哈希值, 属性相同的对象equals()方法要返回true.
为了提高效率, hashCode()方法在属性不同的时候尽量返回不同的哈希值.
HashMap (线程不安全,存取速度快,允许存放null键,null值。)
在每次存储键值对的时候, 调用Key对象的hashCode()方法计算一个哈希值. 在集合中查找是否有哈希值相同的Key对象.
如果没有哈希值相同的Key对象就直接存入键值对.
如果有哈希值相同的Key对象, 那么和这些相同的Key对象进行equals()比较.
比较结果为false就直接存入, 比较结果为true则将Value对象覆盖.
Hashtable
线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。
|