HashMap的原理

1、HashMap的概述

HashMap是基于哈希表的Map 接口的实现。


2、HashMap的特点

a)Hash M ap是非线程安全     

b)HashMap允许使用null 值和null 键。即允许key和value为null

c)HashMap相对执行效率要高


3、HashMap的内部存储结构

         Java中数据结构最底层的两种结构,一种是数组,一种是链表(有指针引用),数组的特点:空间连续,寻址迅速,但是在执行增加和删除操作的时候需要有较大幅度的元素移动,代价较大,所以查询速度快,增删较慢。而链表的特性刚好相反,由于存储空间不连续,寻址困难,但是增删只需要修改指针,所以查询慢,增删快。有没有一种数据结构来综合一下数组和链表,以便发挥他们各自的优势呢?答案就是:哈希表!哈希表具有较快的查询速度,以及相对较快的增删速度,所以很适合在海量的数据环境中使用。一般实现哈希表的方法采用“拉链法”,我们可以理解为“链表的数组”,如下图:



从上图中,我们可以发现哈希表是由数组+链表组成的,一个长度为16的数组中,每个元素存储的是一个链表的头结点。那么这些元素是按照什么样的规则存储到数组中呢。一般情况是通过hash(key)%len获得,也就是元素的key的哈希值对数组长度取模得到。比如上述哈希表中,12%16=12,28%16=12,108%16=12,140%16=12。所以12、28、108以及140都存储在数组下标为12的位置。它的内部其实是用一个Entity数组来实现的,属性有key、value、next。


4、HashMap的存取

a) 存储

当程序试图将多个key-value放入HashMap中时,如下代码片段为例:


Map<String,String> map = new HashMap<String,String>();  
        map.put("姓名", "张三"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值