2.3hashmap的存储结构

1HashMap的数据结构(HashMap通过hashcode对其内容进行快速查找,是无序的)

   

  数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端。

  数组 :数组的存储区是连续的,占用内存严重,故空间复杂度很大。但数组的二分查找时间度小;数组的特点:寻址容易,插入和

删除困难。

  链表 :链表的储存区离散,占用内存比较宽松,故空间复杂度很小,但时间复杂度大;链表的特点:寻址困难,插入和删除容易。

   

   

哈希表

  HashMap是由数组+链表组成;寻址容易,插入和删除容易。(存储单元数组Entry[],数组里面包含链表

  HashMap其实也是由一个线性的数组实现的。所以可以理解为其存储数据的容器就是一个线性容器;

  HashMap里面有一个内部静态类Entry,其重要的属性有keyvaluenext,从属性keyvalue 就可以很明显的看出来 Entry就是

  HashMap键值对实现的一个基础bean;也就是说HashMap的基础就是一个线性数组,这个数组就是Entry[]Map里面的内容都保存

Entry[]中;

   

来自 <http://blog.csdn.net/hu948162999/article/details/42118555>

HashMap存储结构图

这里先给出HashMap的存储结构,在后面的源码分析中,我们将更加详细的对此作介绍。HashMap采取数组加链表的存储方式来实现。亦即数组(散列桶)中的每一个元素都是链表,如下图:

   

   

      2-1

说明:下面针对HashMap的源码分析中,所有提到的桶或散列桶都表示存储结构中数组的元素,桶或散列桶的数量亦即表示数组的长度,哈希码亦即散列码

   

来自 <http://www.cnblogs.com/rogerluo1986/p/5851300.html>

HashMap其实也是一个线性的数组实现的,所以可以理解为其存储数据的容器就是一个线性数组。这可能让我们很不解,一个线性的数组怎么实现按键值对来存取数据呢?这里HashMap有做一些处理。

首先HashMap里面实现一个静态内部类Entry,其重要的属性有 key , value, next,从属性key,value我们就能很明显的看出来Entry就是HashMap键值对实现的一个基础bean,我们上面说到HashMap的基础就是一个线性数组,这个数组就是Entry[]Map里面的内容都保存在Entry[]里面。

    /**

     * The table, resized as necessary. Length MUST Always be a power of two.

     */

    transient Entry[] table;

   

来自 <http://blog.csdn.net/vking_wang/article/details/14166593>

   

  HashMap的使用那么简单,那么问题来了,它是怎么存储的,他的存储结构是怎样的,很多程序员都不知道,其实当你put和get的时候,稍稍往前一步,你看到就是它的真面目。其实简单的说HashMap的存储结构是由数组和链表共同完成的

   

来自 <http://www.cnblogs.com/wuhuangdi/p/4175991.html>

   

   

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值