概述
1、继承关系:
- java.lang.Object
-
- java.util.AbstractMap<K,V>
-
- java.util.HashMap<K,V>
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.
|
-
Methods inherited from class java.util.AbstractMap
equals, hashCode, toString
-
Methods inherited from class java.lang.Object
finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Map
equals, hashCode
最后
以上就是着急老虎为你收集整理的HashMap
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复