HashMap<K,V>详解

1、继承关系:

2、HashTable基于Map接口的实现,这一实现提供了所有的Map接口的实现,并且允许null值和null键。(HashMap类和HashTable大致上是一样的,除了有2点不同之处,即为HashMap是非同步的[线程不安全的]和允许null值存在)。该类对Map中元素的顺序并未做出任何保证,尤其是,它不能保证随着时间的改变其顺序不发生变化。

3、该类中,put和get方法的执行时间为常数级的,因为我们假定了Map中的元素已经按照哈希功能分开存储。HashMap在扩展自身容量时,基于集合视图的迭代是要发费一定比例时间的。因此如果迭代功能很重要的话,不要把初始容量大小设置太高的做法是很重要的。

4、HashMap中有两个参数会影响其实例化:初始容量和载入属性。容量是哈希表中哈希元的数量,初始容量就是哈希表创建时的容量,载入属性是一种决定方式,该方式确定了在HashTable自动增长容量之前是如何判定HashTable中元素是否已满。当哈希表的入口数多于载入属性的实例和其当前容量时,HashTable会重新执行其哈希功能(也就是说,内部数据结构会被重新创建)以便哈希表的哈希元能够变为大约原来的两倍。

5、通常来讲,默认载入属性都会在时间和空间上有一个很好的权衡。较高的值会降低使用空间但也会增加查表成本(会影响HashMap大部分的操作,包括get和put方法)。在开始设置容量时,应充分考虑到Map的进入元素数和载入属性,以便将哈希功能重构次数最小化,如果初始化容量大于根据载入属性而进入Map中的元素数,那么重构哈希功能将不会出现。

6、HashMap中如果有很多映射,那么创建一个更加有效的大容量将使得映射存储更加有效,而不是让其根据需要自动增长大小。

注意,这一实现是不同步的,如果多个线程同时使用了HashMap,而且至少一个线程修改了HashMap的结构,它在外面看起来一定是要同步的(结构改变包括,添加或删除一个或者多个映射,仅仅改变某个键对应的值不算是结构改变),这通常由同步一些包含Map的对象来完成。如果这样的对象不存在,那么我们需要通过Collections.synchronizedMap 方法来将其包裹在内。这最好在创建时就执行,以阻止发生一些不必要的事情:

 Map m = Collections.synchronizedMap(new HashMap(...));
7、由类的迭代器返回的迭代次数是实效很迅速的:在迭代创建后的如果集合set发生修改,除了通过迭代器自身的remove方法外的其它任何方法,迭代会抛出异常ConcurrentModificationException。 因此,就同时修改元素而言,迭代会迅速且全部失效,而不是冒险去出现一些在未来某时不确定的行为。

注意迭代器的fail-fast特性不能保证,正如在非同步化修改中做保证也是不可能的。fail-fast迭代次数会在被动的尽力的基础上抛出 ConcurrentModificationException异常。因此,写一个依赖此异常来判定其正确性的程序的想法是错误的:迭代器里的fail-fast

行为仅应该被用作查找bug。

8、常用方法:

Modifier and Type Method and Description
void clear()
Removes all of the mappings from this map.
Object clone()
Returns a shallow copy of this  HashMap instance: the keys and values themselves are not cloned.
boolean containsKey(Object key)
Returns  true if this map contains a mapping for the specified key.
boolean containsValue(Object value)
Returns  true if this map maps one or more keys to the specified value.
Set<Map.Entry<K,V>> entrySet()
Returns a  Set view of the mappings contained in this map.
V get(Object key)
Returns the value to which the specified key is mapped, or  null if this map contains no mapping for the key.
boolean isEmpty()
Returns  true if this map contains no key-value mappings.
Set<K> keySet()
Returns a  Set view of the keys contained in this map.
V put(K key, V value)
Associates the specified value with the specified key in this map.
void putAll(Map<? extends K,? extends V> m)
Copies all of the mappings from the specified map to this map.
V remove(Object key)
Removes the mapping for the specified key from this map if present.
int size()
Returns the number of key-value mappings in this map.
Collection<V> values()
Returns a  Collection view of the values contained in this map.



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值