网上关于HashMap的工作原理的文章多了去了,所以我也不打算再重复别人的文章。我就是有点好奇,我怎么样能更好的理解他的原理,或者说使用他的特性呢?最好的开发就是测试~

  虽说不详讲hashmap的工作原理,但是起码的常识还是要提一下的。

一句话:hashmap最直观的表现是一维数组或者说一维字典,但是每个每个值又可以指向另一个数组或都字典!

一张图:

  其实说实话,给我个人的感觉是,说链表只是显得高大上些罢了,当然这片面的理解,不过也是令人误解的地方。

  我曾经就以为,链表真是个高大上的东西,那我怎样生成这样的链接呢?

  难道是 HashMap.put("c", "xxx").put("sss", "ssssss"), 链式调用 ?

  难道是 HashMap.get("c").put("ccx")?

  难道是 HashMap.put("c", "1"); HashMap.put("c", "2"); HashMap.put("c", 333); ?

  很显然,这是会犯错误的,因为IDE就不会让你通过过,编译是不会让你过的?

  那么,回到这个问题上,什么叫链表?

  百度百科解释:链表是一种物理存储单元上非连续、非顺序的存储结构数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。

  那么,说白了,链表就是说,你这个key可以指向任何地方,当然也就包含了hashmap了。 所以想要形成多层链表,只要嵌套多个hashmap就可以了。

  测试代码如下:

import java.util.HashMap;
public class HashmapImprove {
public static void main(String[] args) {
HashMap<String, Object> hashMap1 = new HashMap<>();
HashMap<String, Object> hashMap2 = new HashMap<>();
HashMap<String, Object> hashMap3 = new HashMap<>();
hashMap1.put("h1-1", 2);
hashMap1.put("h1-2", 336);
hashMap2.put("hashmap1", hashMap1);
hashMap2.put("h2-2", "moto");
hashMap2.put("h2-3", "xys");
hashMap3.put("hashmap2", hashMap2);
hashMap3.put("h3-2", "3333");
hashMap3.put("h3-3", 2);
System.out.println("hello, world." + hashMap3);
}
}

  断点调试一下,清晰明了:

  说得更直白一点,Hashmap其实就是个多维数据,只不过数据类型可以是任意的而已。当然了,其实现原理还是很高大上的,比如:链表、遍历、性能、并发!

  遇到不懂的问题,测试一下就明白了!

  做个不纠结的开发!哈哈

java 关于 hashmap 的实现原理的测试的更多相关文章

  1. 【转】Java学习---HashMap的工作原理

    [原文]https://www.toutiao.com/i6592560649652404744/ HashMap的工作原理是近年来常见的Java面试题.几乎每个Java程序员都知道HashMap,都 ...

  2. Java中HashMap的实现原理

    最近面试中被问及Java中HashMap的原理,瞬间无言以对,因此痛定思痛觉得研究一番. 一.Java中的hashCode和equals 1.关于hashCode hashCode的存在主要是用于查找 ...

  3. Java中HashMap底层实现原理(JDK1.8)源码分析

    这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JD ...

  4. Java:HashMap的实现原理(JDK1.8)

    1.    HashMap概述: HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特别是它不保证该顺序恒久不变 ...

  5. JAVA中hashmap的分析

    从http://blog.csdn.net/luanlouis/article/details/41576373?utm_source=tuicool&utm_medium=referral学 ...

  6. 牛客网Java刷题知识点之HashMap的实现原理、HashMap的存储结构、HashMap在JDK1.6、JDK1.7、JDK1.8之间的差异以及带来的性能影响

    不多说,直接上干货! 福利 => 每天都推送 欢迎大家,关注微信扫码并加入我的4个微信公众号:   大数据躺过的坑      Java从入门到架构师      人工智能躺过的坑          ...

  7. Java基础-hashMap原理剖析

    Java基础-hashMap原理剖析 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一.什么是哈希(Hash) 答:Hash就是散列,即把对象打散.举个例子,有100000条数 ...

  8. java的HashMap 原理

    https://www.cnblogs.com/chengxiao/p/6059914.html 哈希表(hash table)也叫散列表,是一种非常重要的数据结构,应用场景及其丰富,许多缓存技术(比 ...

  9. Java基础知识强化之集合框架笔记79:HashMap的实现原理

    1. HashMap的实现原理之 HashMap数据结构: HashMap是对数据结构中哈希表(Hash Table)的实现, Hash表又叫散列表.Hash表是根据关键码Key来访问其对应的值Val ...

随机推荐

  1. Bash Excercises

    1. cat <<EOF #!/bin/bash function printHelp { cat<<EOF Run the Dash vector tests. Usage: ...

  2. ke

    #include <stdio.h> #include <stdlib.h> // For rand() and srand() #include <time.h> ...

  3. 2.solr学习速成之安装

    1.下载解压solr-5.3.1.tgz [root@205 opt]# tar -zxf solr-5.3.1.tgz -C /opt/module/ 2.将solr-5.3.1/server/so ...

  4. 详解Linux进程(作业)的查看和杀死

    目录: 引入进程 进程 线程 PS命令 TOP命令 其他查看进程命令 进程的优先级 作业控制机制 kill命令 一.引入进程 1.内存划分为:用户空间和内核空间 1.在用户空间里运行的进程,就是用户进 ...

  5. 读阿里巴巴Java开发手册v1.2.0之编程规约有感【架构篇】

     不为过去蹉跎,改变当下. 为什么开篇就送这么一句话给大家,我相信很多处于1-3年码龄的哥们儿们,在平时的编码历程中编码的个性可能是多彩的,每个人都有每个人特定的风格,但是我们现在这么随意写,以后这么 ...

  6. 移动应用/APP的测试流程及方法

    1. APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间,一般测试时间为两三周(即15个工作日),根据项目情况以及版本质量可适当缩短或延长测试时间.正式测试前先 ...

  7. uibutton颜色设置

     UIColor *color = [UIColor colorWithRed:100 / 255.0 green:20 / 255.0 blue:50 / 255.0 alpha:1.0]; 

  8. C++经典绘图工具EasyX

    EasyX简介 EasyX 在学习C语言时,很多同学抱怨说C只能写最简单的Demo程序,通过printf在屏幕上打印字符来验证代码.这样的编程很枯燥,一点没觉得自己在设计软件. EasyX是针对C++ ...

  9. XCode 8.3 Automatically manage signing 问题

    记录iOS证书问题 无意中选择了Personal team,后台自动生成bundle identifier:com.xxx.project,导致不能在Organization team创建,而且在de ...

  10. PHP编译

    编译php-5.3.6的时候需要先打一个内存泄露的补丁,具体的操作如下 tar vzxf suhosin-0.9.32.1.tar.gz tar vjxf php-5.3.6.tar.bz2 cd p ...