北大青鸟java培训:Java中最常用的set类框架?
HashMap是基于哈希表的Map接口实现的,它提供了所有可选的映射操作。
甘肃计算机培训/发现存储对的映射,允许多个空值和一个空键。
但是,这个类不保证映射的顺序,特别是不保证顺序不变。
HashMap类与Hashtable大致相同,只是HashMap是异步的,并且允许null。
这个实现假设散列函数在桶中适当地分布元素,这可以为基本操作(get和put)提供稳定的性能。
迭代集合视图所需的时间与HashMap实例的“容量”(桶的数量)和大小(键值映射关系的数量)成正比。
因此,如果迭代性能很重要,不要将初始容量设置得太高(或者将加载因子设置得太低)。
HashMap的一个实例有两个影响其性能的参数:初始容量和负载系数。
容量是哈希表中的桶数,初始容量只是哈希表创建时的容量。
负载因子是一种衡量哈希表在容量自动增加之前可以有多满的指标。
当哈希表中的条目数量超过加载因子和当前容量的乘积时,哈希表将被重新哈希(即内部数据结构将被重建),这样哈希表将具有大约两倍的桶数量。
通常,默认加载因子(0.75)寻求时间和空间成本之间的折衷。
虽然高加载因子减少了空间开销,但也增加了查询开销(这在大多数HashMap类操作中都有所体现,包括get和put操作)。
在设置初始容量时,应该考虑映射中所需的条目数量及其加载因子,以便最大限度地减少重新散列操作的次数。
如果初始容量大于最大条目数除以加载因子,则不会发生再散列操作。
注意,这个实现不是同步的。
如果多个线程同时访问一个HashMap实例,并且其中至少有一个线程在结构上修改了列表,那么它必须保持外部同步。
这通常通过同步用于封装列表的对象来实现。
但是,如果没有这样的对象,应该使用{ @ link collections # synchronizedmapcollections。SynchronizedMap}进行“包装”,这最好在创建时完成,以避免对地图进行意外的异步操作。
mapm = collections . synchronized map(new hashmap(...));二、构造函数HashMap提供三个构造函数:HashMap():构造一个空HashMap,默认初始容量(16),默认加载因子(0.75)。
HashMap(intinitialCapacity):用指定的初始容量和默认加载因子(0.75)构造一个空HashMap。
HashMap(intinalpacity,float load factor):用指定的初始容量和加载因子构造一个空HashMap。
这里提到两个参数:初始容量和装载系数。
这两个参数是影响HashMap性能的重要参数,其中容量代表哈希表中桶的数量,初始容量是创建哈希表时的容量,负载因子是衡量哈希表在容量自动增加之前可以有多满的指标,衡量的是哈希表的空间使用情况。加载因子越大,哈希表的填充度越高,反之亦然。
对于使用链表方法的哈希表,查找一个元素的平均时间为O(1+a),所以如果加载因子较大,空间会得到更充分的利用,但结果是搜索效率下降。如果加载因子太小,哈希表的数据会过于稀疏,会造成严重的空间浪费。
系统默认的负载系数是0.75,一般情况下我们不需要修改。
HashMap是一种支持快速访问的数据结构。要了解它的性能,就必须了解它的数据结构。