前注:本文介绍的HashMap并非Java类库的实现。而是根据哈希表知识的一个实现。

上文介绍了开放地址法实现HashTable,它的缺点是对hashCode映射为地址后如果出现重复地址,则会占用其他元素的位置。这样HashTable存储容量有限,而且不便于算法理解。本文介绍链地址法实现HashMap。

链地址法内部仍然有一个数组,但区别与开放地址法,该数组存储的是一个链表的引用。当根据hashCode计算出数组下表后,对元素的增删查改都是在该数组元素所指向的链表上完成的。这就解决了hashCode重复的问题。因为,当hashCode重复,多个元素对应同一个地址,但元素实际存储的位置在数组对应的链表上。所以相同hashCode的不同元素可以存储在同一位置。

下面是代码实现:

package org.lyk.interfaces;

public interface IMap<K,V>
{
    /**
     * 根据key值增加一个value,如果key重复,则新元素替换旧元素
     * @param key
     * @param value
     */
    public void put(K key, V value);
    /**
     * 根据key值移除value
     * @param key
     * @return
     */
    public boolean remove(K key);
    public V get(K key);
    public boolean contains(K key);
    public void replace(K key, V value);
    
}
IMap

相关文章:

  • 2021-10-31
  • 2021-09-28
  • 2022-12-23
  • 2022-12-23
  • 2021-11-08
  • 2021-10-10
  • 2021-12-07
  • 2021-07-12
猜你喜欢
  • 2022-12-23
  • 2021-08-23
  • 2021-10-18
  • 2022-12-23
  • 2022-12-23
  • 2022-01-16
  • 2021-05-18
相关资源
相似解决方案