hashCode、.equals

130 阅读1分钟

由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会报空指针异常