HashMap是java中相当重要的数据结构,使用HashMap的场景非常之多,因此,了解HashMap实现的过程和原理,是非常有必要的,在一些面试中也会经常被问到。好了,我们赶紧来研究java内部是怎么实现HashMap的吧!
keySet()、values()、entrySet()
1. 可以直接通过keySet()来返回一个在Map中键的一个视图。返回类型是Set。 2. 通过values()返回一个在Map中值的一个视图。返回类型是Collection。 3. 可以通过entrySet()返回一个在Map中键-值的一个视图。返回类型是Set。但是entrySet()所返回的Set当中每一个元素都是Map.Entry的类型。Entry是Map当中定义的一个静态的接口,为了显示它与Map的亲切关系,它们都是一起出现。4.HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[],Map里面的内容都保存在Entry[]里面。
扩容很耗时,而扩容的次数主要取决于加载因子的值,因为它决定这扩容的次数。下面讲下它的取值的重要性:
- 加载因子越小,优点:存储的冲突机会减少;缺点:扩容次数越多(消耗性能就越大)、同时浪费空间较大(很多空间还没用,就开始扩容了)
- 加载因子越大,有点:扩容次数较少,空间利用率高;缺点:冲突几率就变大了、链表(后面介绍)长度会变长,查找的效率降低。
|