HashMap、LinkedHashMap、TreeMap

HashMap是基于哈希表的Map接口实现,以key-value的形式存在。在HashMap中,key-value总是会被当作一个整体来处理。系统会根据hash算法来计算key-value的存储位置。

01 HashMap扩容

HashMap(int initCapacity,float loadFactor):构造一个带指定初始容量和加载因子的空HashMap

初始容量:表示哈希表中桶的数量。 加载因子:是哈希表在其容量自动增加之前可以达到多满的一种尺度,衡量的是一个散列表空间的使用程度。

负载因子越大表示散列表的装填程度越高,反之越小。

如果负载因子越大,对空间利用越充分,查找效率会降低。如果负载因子太小,散列表的数据过于稀疏,对空间造成浪费。默认负载因子0.75,一般无需修改。

02 HashMap保存数据的过程

首先判断key是否为null。若为null,直接调用putForNullKey方法。若不为空,则先计算key的hash值,然后根据hash值搜索在table数组中的索引位置,如果table数组在该位置处有元素,则通过比较是否存在相同的key,若存在则覆盖原有key的value。否则,将该元素保存在链头。若table中没有该元素,则直接保存。

当length = 2^n 时,不同的hash值发生碰撞的概率较小,这样会使得数据在table数组中分布较均匀,查询速度也更快。

03 与LinkedHashMap、TreeHashMap的不同

HashMap保存了记录的插入顺序,再用清水Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的。遍历时比HashMap慢,但是当HashMap容量很大,数据很小的时候,遍历起来可能会比LinkedHashMap慢,因为LinkedHashMap的遍历速度只与实际数据有关,和容量无关。

TreeMap实现了SortMap接口,能够把它保存的记录,根据键排序,默认是按照键的升序。也可以指定排序的比较器,当用Iterator遍历TreeMap时,得到的记录是排过序的。

转载于:https://my.oschina.net/u/3938912/blog/3085051

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值