HashMap

public class HashMap<K,V> extends AbstractMap<K,V>
  implements Map<K,V>, Cloneable, Serializable {
      ...

      static class Node<K,V> implements Map.Entry<K,V> {
          ...
      }
      final class KeySet extends AbstractSet<K> {
          ...
      }
      final class Values extends AbstractCollection<V> {
          ...
      }
      final class EntrySet extends AbstractSet<Map.Entry<K,V>> {
          ...
      }
      abstract class HashIterator {
          ...
      }
      final class KeyIterator extends HashIterator implements Iterator<K>  {
          ...
      }
      final class ValueIterator extends HashIterator implements Iterator<V> {
            ...
        }

      final class EntryIterator extends HashIterator
        implements Iterator<Map.Entry<K,V>> {
            ...
        }
      static class HashMapSpliterator<K,V> {
            ...
        }
      static final class KeySpliterator<K,V>
        extends HashMapSpliterator<K,V>
        implements Spliterator<K> {
            ...
        }
      static final class ValueSpliterator<K,V>
        extends HashMapSpliterator<K,V>
        implements Spliterator<V> {
            ...
        }
      static final class EntrySpliterator<K,V>
        extends HashMapSpliterator<K,V>
        implements Spliterator<Map.Entry<K,V>> {
            ...
        }
      static final class TreeNode<K,V> extends LinkedHashMap.Entry<K,V> {
            ...
        }

  }

基于哈希表并实现Map接口。这个实现提供了map的所有操作,并允许key和value为null值。这个类并不保证映射的顺序,也不保证映射的顺序是一直不变的。

HashMap 和 Hashtable 很像,它们的区别在于是否同步和是否允许null值。

如果哈希函数可以将元素恰当的分散在桶中,那么它可以保证基本的操作时常数时间O(1)的(如get、put)。集合迭代需要的时间和HashMap的容量成正比O(Capacity* Number of key-value)。所以,当iteration很重要的时候,不能将Capacity初始值设置太高。

HashMap有两个参数对它的表现影响很大:初始容量(Capacity)和装填因子(load factor)。

初始容量默认值值为16,装填因子为0.75。这里,容量的值必须为2的,原因稍后解释。

多个Key值的hashCode()可能为同一值,为了改善此时的性能,当Key是Comparabl时,使用比较来进行排序。

HashMap不是同步的,不是线程安全的。当需要多个线程对HashMap执行并发操作时,需要外部加锁同步,或者使用其他封装的同步的Map类,或者利用Collections.synchronizedMap对HashMap进行封装。

Iterator是fail-fast。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值