由hashCode、.equals到HashMap、HashTable
.equals和hashcode的区别以及联系
- hashcode()是对象的哈希值
- .equals()是对象的比较方法(底层是==比较地址)
- 在HashMap中这两个方法是有联系的:
- hashCode相等.equals一定相等
- .equals相等hashCode一定相等
- 如果两个对象相等,那么它们的hashCode()值一定相同。这里的相等是指,通过equals()比较两个对象时返回true。
- 如果两个对象hashCode()相等,它们并不一定相等。因为在散列表中,hashCode()相等,即两个键值对的哈希值相等。然而哈希值相等,并不一定能得出键值对相等,此时就出现所谓的哈希冲突场景。(所以说重写.equals方法一定要重写hashCode方法)
HashMap与HashTable区别
- HashMap线程不安全,效率比较高
- HashTable线程安全(使用了synchronized进行加锁),效率比较低
- HashMap Key允许为null,存放在数组的第0个位置(获取KEY:hashCode取模就是桶的位置)
- HashTable Key不允许为null,存放null会报空指针异常