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("姓名", "张三"