想分享一个对HashMap的理解:

我们首先要知道一个HashMap对象的构成,一般的理解是:一个Map里面放了很多个键值对,合在一起就是一个键值对的数组;

大概这么理解没问题,可是有一点要说明一下,在这个键值对组成的数组中,数组的每个元素的内存空间不一定只有对键值,这个要看情况了。

我们了解下HashMap的实现原理就明白为什么了。

=======================================================

我们创建一个HashMap通常如下:

HashMap mp = new HashMap();

当我们使用Map的put(key,value)方法填值的时候,HashMap会通过你传进来的key计算一个Hash值,不管你传进的字符串多长,都会通过计算得到一个int类类型的值,统称Hash值,然后处理Hash值得到一个数组下标。系统会将我们传进的key和value封装成一个Entry的对象放在这个地址中。问题就这样来了,不同的Hash去计算数组下标,结果可能相同,而这个下标之前已经用过了,存储了另外一对键值;怎么办?HashMap会在这个下标的元素后面再加一个存储单元用来存储最旧的键值(新来的放在原来的位置)。这两对儿键值在一个数组元素中,通过链表的形式链接起来。

=================

先说这么多吧,,,以后补充

Java特性-HashMap的更多相关文章

  1. java:警告:[unchecked] 对作为普通类型 java.util.HashMap 的成员的put(K,V) 的调用未经检查

    java:警告:[unchecked] 对作为普通类型 java.util.HashMap 的成员的put(K,V) 的调用未经检查 一.问题:学习HashMap时候,我做了这样一个程序: impor ...

  2. Java中HashMap和TreeMap的区别深入理解

    首先介绍一下什么是Map.在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对. Has ...

  3. Java学习----HashMap原理

    1.HashMap的数据结构 数组的特点是:寻址容易,插入和删除困难:而链表的特点是:寻址困难,插入和删除容易.那么我们能不能综合两者的特性,做出一种寻址容易,插入删除也容易的数据结构?答案是肯定的, ...

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

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

  5. Java的HashMap是如何实现的?

    以下内容转自:http://blog.csdn.net/vking_wang/article/details/14166593 1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储 ...

  6. Java面试& HashMap实现原理分析

    1. HashMap的数据结构 数据结构中有数组和链表来实现对数据的存储,但这两者基本上是两个极端.  数组 数组存储区间是连续的,占用内存严重,故空间复杂的很大.但数组的二分查找时间复杂度小,为O( ...

  7. angularJS操作键值对象(类似java的hashmap)填坑小结

    前言: 我们知道java的hashmap中使用最多的是put(...),get(...)以及remove()方法,那么在angularJS中如何创造(使用)这样一个对象呢 思路分析: 我们知道在jav ...

  8. Java学习——HashMap

    遍历 Map map = new HashMap(); Iterator iter = map.entrySet().iterator(); while (iter.hasNext()) { Map. ...

  9. Java之HashMap在多线程情况下导致死循环的问题

    PS:不得不说Java编程思想这本书是真心强大.. 学习内容: 1.HashMap<K,V>在多线程的情况下出现的死循环现象   当初学Java的时候只是知道HashMap<K,V& ...

随机推荐

  1. VMware Ubuntu Kaldi

    1.VMware10.0 秘钥网上搜就好了 2.ubuntu12.04 (1)安了几次14.04,16.04,12.04,最后窗口和分辨率的bug 还是没有解决 (2)终端显示菱形乱码的解决:直接用英 ...

  2. sshfs三步走----实用(mac)

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #ffffff } p.p2 { margin: 0.0px 0. ...

  3. medoo–高效的轻量级PHP数据库操作类

    网址:http://medoo.lvtao.net/ /*medoo.php*/ class medoo { protected $database_type = ‘mysql’; protected ...

  4. Jekyll x Liquid 控制文章列表只显示特定类别的Post

    使用Liquid按照Category或者Tag过滤Post List 文章首发于szhshp的第三边境研究所(szhshp.org), 转载请注明 前段时间画了一些漫画,考虑把漫画相关的Post放到另 ...

  5. angularjs路由

    需要引入angular.js,angular-ui-router.min.js <ul> <li><a href="#home">首页</ ...

  6. hg0088新2网址

    封装通俗的说,就是我有一些秘密不想让人知道,就通过私有化变量和私有化方法,这样外界就访问不到了.hg0088新2网址然后如果你有一些很想让大家知道的东西,你就可以通过this创建的属性看作是对象共有属 ...

  7. web.config 修改数据库连接

    <connectionstrings> </database=数据库名字 ;uid = 登录数据库的名字;Password = 登录数据库的密码;/> </connect ...

  8. python【6】-函数式编程

    一.高阶函数 map,reduce 1.map() 函数接收两个参数,一个是函数,一个是序列,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回. def f(x): retur ...

  9. Linux下搭建DNS服务器

    1. 安装需要的软件 由于实验过程是在自己电脑进行的,所以需要安装bind bind-chroot,以下为安装过程. 图1-1 安装bind 图1-2 安装bind-chroot 2.修改DNS主配置 ...

  10. spring MVC 资料

    1.web.xmlorg.springframework.web.filter.CharacterEncodingFilter;配置字符编码,配置示例: <filter> <filt ...