java map put map_关于Java中有关Map中put方法理解
最近在看一些关于Java源码的东西,理解其中的奥妙,今天看到关于Map中put方法,虽然不是特别了解,但是毕竟有点心得体会,拿出来记录一下。
关于Map中put的存储过程大概是,使用map.put以后,编译器会根据k来获取hash值,然后调用一个方法,把其中的内容放入到一个节点,然后用数组的形式来获取节点。
main(String[] args){
HashMap map=HashMap<>();
map.put(,);
map.put(,);
map.put(,);
map.toString();
System..println(map);
}
这一部分是我的测试用例。
hash(Object key) {
h;
(key == ) ? : (h = key.hashCode()) ^ (h >>> );
}
调用map后,根据key来获取到其中的hash,其中hash值获取是把其中的key变成char型,通过for循环遍历获取到,最后返回到。
put(key, value) {
putVal((key), key, value, , );
}
在记录了hash值和key,value以后,调用
putVal(hash, key, value, onlyIfAbsent,
) {
Node[] tab; Node p; n, i;
((tab = ) == || (n = tab.) == )
n = (tab = resize()).;
((p = tab[i = (n - ) & hash]) == )
tab[i] = newNode(hash, key, value, );
{
Node e; k;
(p.== hash &&
((k = p.) == key || (key != && key.equals(k))))
e = p;
(p TreeNode)
e = ((TreeNode)p).putTreeVal(, tab, hash, key, value);
{
(binCount = ; ; ++binCount) {
((e = p.) == ) {
p.= newNode(hash, key, value, );
(binCount >= - ) treeifyBin(tab, hash);
;
}
(e.== hash &&
((k = e.) == key || (key != && key.equals(k))))
;
p = e;
}
}
(e != ) { oldValue = e.;
(!onlyIfAbsent || oldValue == )
e.= value;
afterNodeAccess(e);
oldValue;
}
}
++;
(++> )
resize();
afterNodeInsertion();
;
}
首先创建一个Node输入四个参数,hash,key,value还有nextNode四个参数,然后通过判断添加到tab[i]里面。
最后输出时候用toString()方法遍历
String toString() {
Iterator> i = entrySet().iterator();
(! i.hasNext())
;
StringBuilder sb = StringBuilder();
sb.append();
(;;) {
Entry = i.next();
key = .getKey();
value = .getValue();
sb.append(key == ? : key);
sb.append();
sb.append(value == ? : value);
(! i.hasNext())
sb.append().toString();
sb.append().append();
}
}
最后用StringBuilder拼接。
java map put map_关于Java中有关Map中put方法理解相关推荐
- 结构为键值的map_在Java中增加Map值的最有效方法-只需搜索键一次
结构为键值的map 这个问题可能被认为太基础了,但是在论坛中经常被问到. 在本文中,我将讨论一种仅在Map ONCE中搜索键的方法. 让我们首先来看一个例子. 假设我正在使用Map创建一个字符串频率列 ...
- java 定义map_定义map%3ck_v%3e,Java中定义Map恒量,List常量
Java中定义Map常量,List常量 一般的方式的使用静态代码块.比如: public final static Map map = new HashMap(); static { map.put( ...
- Java中的Map集合遍历总结(详尽版)
因为Map集合中的键值对排列无序,所以不能用传统的for循环来遍历,只能使用加强循环(for-each)和迭代器进行遍历. 让我们通过例子来了解Map集合的遍历: package gather; im ...
- java中遍历map的几种方法介绍
喜欢用Java写程序的朋友都知道,我们常用的一种数据结构map中存储的是键值对,我们一般存储的方式是: map.put(key, value); 而提取相应键的值用的方法是: map.ge ...
- Java 8 Stream Api 中的 map和 flatMap 操作
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1.前言 Java 8 ...
- Scala中映射的语法(对应Java中的Map集合的定义)
1. 映射 在Scala中,把哈希表这种数据结构叫做映射 1.1. 构建映射 1.2. 获取和修改映射中的值 好用的getOrElse 注意:在Scala中,有两种Map,一个是immutable包下 ...
- java中把map转换成list
private String key; private String value; //把map转换成list的公共方法 public static List map ...
- Java将map置空_Java实现过滤掉map集合中key或value为空的值示例
Java实现过滤掉map集合中key或value为空的值示例 发布时间:2020-09-16 23:26:14 来源:脚本之家 阅读:147 作者:May的博客 本文实例讲述了Java实现过滤掉map ...
- java map中的entry_java中Map及Map.Entry详解(组图)
java中Map及Map.Entry详解(组图) 08-22栏目:技术 TAG:map.entry map.entry Map是java中的接口,Map.Entry是Map的一个内部接口. copyr ...
- java 先进先出的map_「 深入浅出 」java集合Collection和Map
本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...
最新文章
- Kali Linux下运行Sniffjoke出错的解决
- linux下配置DHCP中继代理
- 20155231 实验三 敏捷开发与XP实践
- html转换pdf软件,html转换成高质量的PDF文件[跨平台开源软件]
- P3175-[HAOI2015]按位或【min-max容斥,FWT】
- 源码编译安装Apache-附一键部署脚本
- 结伴自驾游必备,高德地图上线组队实时对讲功能
- python命名实体识别工具_Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器(Named Entity Recognition,NER)...
- 广告智能定向技术lookalike
- 把DamnSmallLinux(DSL)安装到硬盘(虚拟机)并安装GCC
- linux调度器(七)——other cfs class api and functions
- LeNet论文全文翻译《Gradient-based learning applied to document recognition》(上)
- Linux禁用文件可执行权限
- 创业感悟:不忘初心,方得始终
- 第一次搭建ftp遇见的蹩脚的问题
- Matplotlib画图的复杂颜色设置(包括fig, ax, spines, tick)
- 《Fast Online Object Tracking and Segmentation: A Unifying Approach》
- 设计模式“6”大原则!
- android获得键盘高度,Android获取软键盘高度
- python中的array是什么意思_python中数组(numpy.array)的基本操作
热门文章
- 16、Android -- ListView 基础学习
- 挪车电话也有商机,易扫挪车App
- 聊天程序设计实验报告——java
- git:info: detecting host provider for ‘https://gitee.com/‘...
- 农夫山泉病毒性营销方案策划
- 你知道腾讯程序员一年写多少代码嘛?
- 先少谈点人工智能好吗?
- 红帽子安装oracle,红帽子AS4安装oracle9i
- linux device 与driver prove 过程
- 推荐几个选择时间.日期的免费插件 js