首页 > 代码库 > java 关于 hashmap 的实现原理的测试

java 关于 hashmap 的实现原理的测试

  网上关于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);
    }
}

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

技术分享

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

 

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

  做个不纠结的开发!哈哈

 

java 关于 hashmap 的实现原理的测试