最近在看一些关于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方法理解相关推荐

  1. 结构为键值的map_在Java中增加Map值的最有效方法-只需搜索键一次

    结构为键值的map 这个问题可能被认为太基础了,但是在论坛中经常被问到. 在本文中,我将讨论一种仅在Map ONCE中搜索键的方法. 让我们首先来看一个例子. 假设我正在使用Map创建一个字符串频率列 ...

  2. java 定义map_定义map%3ck_v%3e,Java中定义Map恒量,List常量

    Java中定义Map常量,List常量 一般的方式的使用静态代码块.比如: public final static Map map = new HashMap(); static { map.put( ...

  3. Java中的Map集合遍历总结(详尽版)

    因为Map集合中的键值对排列无序,所以不能用传统的for循环来遍历,只能使用加强循环(for-each)和迭代器进行遍历. 让我们通过例子来了解Map集合的遍历: package gather; im ...

  4. java中遍历map的几种方法介绍

          喜欢用Java写程序的朋友都知道,我们常用的一种数据结构map中存储的是键值对,我们一般存储的方式是: map.put(key, value); 而提取相应键的值用的方法是: map.ge ...

  5. Java 8 Stream Api 中的 map和 flatMap 操作

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「码农小胖哥」 1.前言 Java 8  ...

  6. Scala中映射的语法(对应Java中的Map集合的定义)

    1. 映射 在Scala中,把哈希表这种数据结构叫做映射 1.1. 构建映射 1.2. 获取和修改映射中的值 好用的getOrElse 注意:在Scala中,有两种Map,一个是immutable包下 ...

  7. java中把map转换成list

    private String key;     private String value;          //把map转换成list的公共方法     public static List map ...

  8. Java将map置空_Java实现过滤掉map集合中key或value为空的值示例

    Java实现过滤掉map集合中key或value为空的值示例 发布时间:2020-09-16 23:26:14 来源:脚本之家 阅读:147 作者:May的博客 本文实例讲述了Java实现过滤掉map ...

  9. java map中的entry_java中Map及Map.Entry详解(组图)

    java中Map及Map.Entry详解(组图) 08-22栏目:技术 TAG:map.entry map.entry Map是java中的接口,Map.Entry是Map的一个内部接口. copyr ...

  10. java 先进先出的map_「 深入浅出 」java集合Collection和Map

    本系列文章主要对java集合的框架进行一个深入浅出的介绍,使大家对java集合有个深入的理解. 本篇文章主要具体介绍了Collection接口,Map接口以及Collection接口的三个子接口Set ...

最新文章

  1. Kali Linux下运行Sniffjoke出错的解决
  2. linux下配置DHCP中继代理
  3. 20155231 实验三 敏捷开发与XP实践
  4. html转换pdf软件,html转换成高质量的PDF文件[跨平台开源软件]
  5. P3175-[HAOI2015]按位或【min-max容斥,FWT】
  6. 源码编译安装Apache-附一键部署脚本
  7. 结伴自驾游必备,高德地图上线组队实时对讲功能
  8. python命名实体识别工具_Day14:使用斯坦福 NER 软件包实现你自己的命名实体识别器(Named Entity Recognition,NER)...
  9. 广告智能定向技术lookalike
  10. 把DamnSmallLinux(DSL)安装到硬盘(虚拟机)并安装GCC
  11. linux调度器(七)——other cfs class api and functions
  12. LeNet论文全文翻译《Gradient-based learning applied to document recognition》(上)
  13. Linux禁用文件可执行权限
  14. 创业感悟:不忘初心,方得始终
  15. 第一次搭建ftp遇见的蹩脚的问题
  16. Matplotlib画图的复杂颜色设置(包括fig, ax, spines, tick)
  17. 《Fast Online Object Tracking and Segmentation: A Unifying Approach》
  18. 设计模式“6”大原则!
  19. android获得键盘高度,Android获取软键盘高度
  20. python中的array是什么意思_python中数组(numpy.array)的基本操作

热门文章

  1. 16、Android -- ListView 基础学习
  2. 挪车电话也有商机,易扫挪车App
  3. 聊天程序设计实验报告——java
  4. git:info: detecting host provider for ‘https://gitee.com/‘...
  5. 农夫山泉病毒性营销方案策划
  6. 你知道腾讯程序员一年写多少代码嘛?
  7. 先少谈点人工智能好吗?
  8. 红帽子安装oracle,红帽子AS4安装oracle9i
  9. linux device 与driver prove 过程
  10. 推荐几个选择时间.日期的免费插件 js