没有合适的资源?快使用搜索试试~ 我知道了~
Map接口结构 map接口是一个双边队列,拥有key,value两个属性,其中key在存储的集合中不允许重复,value可以重复。 HashMap特点 存储结构在jdk1.7当中是数组加链表的结构,在jdk1.8当中改为了数组加链表加红黑树的结构。 HashMap在多线程的环境下是不安全的,没有进行加锁措施,所以执行效率快。如果我么需要有一个线程安全的HashMap,可以使用Collections.synchronizedMap(Map m)方法获得线程安全的HashMap,也可以使用ConcurrentHashMap类创建线程安全的map。 存储的元素在jdk1.7当中是Entry作为存储的
资源推荐
资源详情
资源评论
HashMap如何添加元素详解如何添加元素详解
Map接口结构接口结构
map接口是一个双边队列,拥有key,value两个属性,其中key在存储的集合中不允许重复,value可以重复。
HashMap特点特点
存储结构在jdk1.7当中是数组加链表的结构,在jdk1.8当中改为了数组加链表加红黑树的结构。
HashMap在多线程的环境下是不安全的,没有进行加锁措施,所以执行效率快。如果我么需要有一个线程安全的HashMap,可以
使用Collections.synchronizedMap(Map m)方法获得线程安全的HashMap,也可以使用ConcurrentHashMap类创建线程安全的map。
存储的元素在jdk1.7当中是Entry作为存储的节点,在jdk1.8当中用Node作为存储的节点,Node实现了Map.Entry接口。在map中其实
是将key和value节点组合起来成为一个Node节点作为存储。
// jdk1.8Node节点
static class Node implements Map.Entry {
final int hash;
final K key;
V value;
Node next;
Node(int hash, K key, V value, Node next) {
this.hash = hash;
this.key = key;
this.value = value;
this.next = next;
}
// 下面省略代码
}
在HashMap中key不允许重复,value可以允许重复,并且key和value都允许是null值,因为他们是另外存储的。
当我们使用自定义类作为HashMap的key时我们需要重写object类的,hashCode()和equals()方法。
在HashMap中链表部分在jdk1.7中新的节点总是在链表的头部,旧的节点在新节点的next域当中,而在jdk1.8中是新的节点总是在
链表的尾部,他们的指向都是由旧节点指向新的节点,由此我们可以记成七上八下。
HashMap当中常见的名词当中常见的名词
DEFAULT_INITIAL_CAPACITY 默认数组容量大小,16
MAXIMUM_CAPACITY 最大数组容量大小,2^30
DEFAULT_LOAD_FACTOR 默认的负载因子,0.75
TREEIFY_THRESHOLD 链表改成红黑树存储的最小长度
MIN_TREEIFY_CAPACITY 链表改成红黑树存储,map数组最小容量
HashMap存储元素过程源码解析(存储元素过程源码解析(jdk1.8))
// 存储元素的数组,加上transient关键字代表不可以被序列化
transient Node[] table;
// 这个方法是HashMap对外公开的添加元素方法
public V put(K key, V value) {
// 实际调用里面的一个默认修饰符的方法
return putVal(hash(key), key, value, false, true);
}
final V putVal(int hash, K key, V value, boolean onlyIfAbsent,
boolean evict) {
Node[] tab; Node p; int n, i;
// 在jdk1.7当中,创建一个HashMap实例是直接分配一个长度为16的数组,
// 在jdk1.8当中,创建HashMap时是分配了一个长度为0的数组,然后调用put方法时,如果数组长
// 度为0时,则调用数组扩容方法,扩容数组到长度为16。当长度不为0时,扩容操作是扩大到原来
// 长度的两倍
if ((tab = table) == null || (n = tab.length) == 0)
// 调用扩容方法,并利用n变量,记录数组的长度
n = (tab = resize()).length;
// 通过计算哈希散列,得出该key应该放在数组的哪一个位置上,用变量p存储该位置上的元素
// 判断该位置上是否已经存在元素,如果不存在元素则直接将该元素放入数组中,存放
资源评论
weixin_38687904
- 粉丝: 8
- 资源: 920
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于Django和OpenCV的智能车视频处理系统.zip
- (源码)基于ESP8266的WebDAV服务器与3D打印机管理系统.zip
- (源码)基于Nio实现的Mycat 2.0数据库代理系统.zip
- (源码)基于Java的高校学生就业管理系统.zip
- (源码)基于Spring Boot框架的博客系统.zip
- (源码)基于Spring Boot框架的博客管理系统.zip
- (源码)基于ESP8266和Blynk的IR设备控制系统.zip
- (源码)基于Java和JSP的校园论坛系统.zip
- (源码)基于ROS Kinetic框架的AGV激光雷达导航与SLAM系统.zip
- (源码)基于PythonDjango框架的资产管理系统.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功