hash

Hash

摘要

数据结构基本分为

  • 结构体(或对象)
  • 数组
  • 链表

哈希函数

Hash也叫散列,hash操作其本质上就是建给一个数据映射成另一个数据,通常情况下原数据的长度
比hash后的数据容量大。这种映射关系我们称为哈希函数。
通常 哈希函数的输入要远远多于哈希值所表示的总数,就有可能两个不同的输入对应同一个哈希值。
通常把具有不同关键码而具有相同哈希值的记录称为“同义词”。

哈希表

哈希表是一种数据结构,实现key-value的快速存取。

HasshCode

  • 相等的对象必须要有相同的哈希码。
  • 不相等的对象可能会存在相同的哈希码。
  • 有同一个哈希值的对象不一定相等。
    HashCode 不可信,因此不要将 HashCode 作为key。
    使用基于哈希的算法,比如 SHA1 。来降低hashcode的冲突。

HashTable

HashMap

线程不安全的原因

因为在自动调整大小的机制下,如果线程试着去添加或者获取一个对象,Map可能会使用旧的索引值,
这样就不会找到Entry对象所在的新桶。

保证线程安全的HashMap实现:ConcurrentHashMap。对于ConcurrentMap来说,只有桶是同步的,
这样如果多个线程不使用同一个桶或者调整内部数组的大小,它们可以同时调用get(),remove(),
或者put()方法。