Map(映射),又称为字典(Dictionary),是由关键字(Key)及其对应的元素值(Value)所组成的元素单元(Element)的表单式集合。 通常,对于Map而言,使用给定的Key,可以迅速地从单元集合中检索到相应的元素。因此,在需要对大量数据进行查找操作而查找的性能又占据重要地位的场合,Map无疑是一种较理想的容器。

HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,此类不保证映射的顺序,特别是它不保证顺序恒久不变。

(一)

下面有一段代码:

上述代码利用HashMap的put方法往映射中添加对象,第一个添加的对象的key是“a”,其对应元素值为"zhangsan"。

因为HashMap不保证顺序,所以输出来的顺序和添加进去的顺序不一定相等。

(二)如果再把一个key值一样的对象插进去会怎么样?

代码:

可见,后插入的键值一样的元素值会把之前的元素值替换掉。

(三)既然HashMap的查找性能高,那么如何体现呢?

代码:

上述代码,通过get()方法搜索key值为b和d的元素,以为key值为b对应的元素值为lisi,所以返回元素值

而key值为d的对象并没有在该HashMap中,所以返回null。

那么反过来,使元素值一样,key不一样的两个对象插入到HashMap中:

可以看出, value值相等,key不同,同样可以放到HashMap中。

(四)

Map里有一个keyset()方法,返回key的集合,Map中的Key是不能够重复的,可以推断出keySet()方法的返回类型是Set;

Map里还有一个values()方法,返回Map中的元素的值,因为元素值可以重复,所以values()方法返回类型是Collection。

所以我们可以通过keySet()方法的返回的Set集合,再调用它的一个迭代器来遍历HashMap内的元素。代码:

输出结果:

a=aa

c=dd

e=ee

b=bb

d=dd

不保证输出顺序。

(五)遍历HashMap的第二种方式

利用Map的内部类Entry来获得key的集合,然后调用entry的getkey()方法和getValue()方法,分别得到map中的key和value

(五)HashSet底层是使用HashMap实现的,当使用add方法将对象添加到Set当中时,实际上是将该对象作为底层所维护的Map对象的key,而value则都是同一个Object对象,这个Object对象实际上我们是用不上的。而Map对象的底层是一个一个Entry对象组成。

(六)当向HashMap中put一对键值时,它会根据key的hashCode值计算出一个位置,该位置即使此对象准备往数组中存放的位置。

如果计算出的位置没有对象存在,就把此对象放在那个位置,如果该位置已经存在对象,则顺着该位置的对象的链开始寻找(Entry类有一个Entry类型的next成员变量,指向该对象的下一个对象),不断地调用equals方法跟链上的对象进行比较,如果链上的对象与这个要插入的对象的equals方法都返回false,则把这个对象插入到该位置的最前面,并且指向原来链上的第一个Entry对象。

如图:

Map,HashMap的更多相关文章

  1. 【转】java 容器类使用 Collection,Map,HashMap,hashTable,TreeMap,List,Vector,ArrayList的区别

    原文网址:http://www.360doc.com/content/15/0427/22/1709014_466468021.shtml java 容器类使用 Collection,Map,Hash ...

  2. (10)集合之双列集合Map,HashMap,TreeMap

    Map中的元素是两个对象,一个对象作为键,一个对象作为值.键不可以重复,但是值可以重复. 看顶层共性方法找子类特有对象. Map与Collection在集合框架中属并列存在 Map存储的是键值对 Ma ...

  3. Map,HashMap,TreeMap

    一.HashMap,TreeMap差别 1.两种常规Map性能 HashMap:适用于在Map中插入.删除和定位元素. Treemap:适用于按自然顺序或自定义顺序遍历键(key). 2.总结 Has ...

  4. Map,HashMap,LinkedHashMap,TreeMap比较和理解

    /* * 获取功能: * V get(Object key):根据键获取值 * Set<K> keySet():获取集合中所有键的集合 * Collection<V> valu ...

  5. Map,Hashmap,LinkedHashMap,Hashtable,TreeMap

    java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMap. Map主要用于存储健值对, ...

  6. Map,HashMap五种遍历方法

    假设有数组            HashMap<Integer, String> h=new HashMap<Integer,String>();        h.put( ...

  7. [剑指offer] 50. 第一个只出现一次的字符 + map,hashmap 及其区别

    class Solution { public: int FirstNotRepeatingChar(string str) { map<char,int>mp; ;i<str.si ...

  8. Map接口,Map.Entry,hashMap类,TreeMap类,WeakHashMap。

    Collection接口之前接触过,每次保存的对象是一个对象,但是在map中保存的是一对对象,是以key->value形式保存的. 定义: public interface Map<K,V ...

  9. Java中List,ArrayList、Vector,map,HashTable,HashMap区别用法

    Java中List,ArrayList.Vector,map,HashTable,HashMap区别用法 标签: vectorhashmaplistjavaiteratorinteger ArrayL ...

随机推荐

  1. Unity3D 新人学习的一点感想

    想到那里写到那里吧 1.Unity3D的优点大家都知道:组件化.c#语言.可见即所得. 当初刚开始学习的是cocos2dx,c++的货,觉得还是写的不错的,也是国人开发的,真的代码很容易懂,直接看引擎 ...

  2. [C++11] Effective Modern C++ 读书笔记

    本文记录了我读Effective Modern C++时自己的一些理解和心得. item1:模板类型推导 1)reference属性不能通过传值参数传入模板函数.这就意味着如果模板函数需要一个refe ...

  3. tomcat下部署可以访问的文件夹

    项目名#文件夹名#文件夹名.xml <Context docBase="D:\文件夹名\r文件夹名"/> 例如: test#zhang#test1.xml <Co ...

  4. 翻译的技巧(The Technique of Translation)——前言

    曰:你要发文章才能毕业! 答:谨遵圣命-- 缘起 研三了,要找工作了,要离开学校了,又要像浮萍般飘荡在世上了,还是学校好呀!本以为写个毕业论文就可以了,谁知老板幽幽地说写篇文章发了吧.我竟无言以对.不 ...

  5. 出现win8.1蓝屏重启故障该如何解决?

    出现win8.1蓝屏重启故障该如何解决?电脑出现win8.1蓝屏重启故障,系统提示“你的电脑遇到问题,需要重新启动,我们只收集某些错误信息,然后为你重新启动.”怎么解决?本教程为你提供了win8.1蓝 ...

  6. Exercises - Kangaroo

    Write a definition for a class named Kangaroo with the following methods: An __init__ method that in ...

  7. java springMVC生成二维码

    Zxing是Google提供的工具,提供了二维码的生成与解析的方法,现在使用Java利用Zxing生成二维码 1),二维码的生成 将Zxing-core.jar 包加入到classpath下. 我的下 ...

  8. .NET的三种缓存(页面缓存,控件缓存,自定义缓存)

    BLL.Area bll = new BLL.Area(); protected void Page_Load(object sender, EventArgs e) { if (Cache[&quo ...

  9. flask页面操作gpn接口

    https://wizardforcel.gitbooks.io/flask-extension-docs/content http://cabeza.cn/blog/2016/02/28/datat ...

  10. WPF拖动DataGrid中的数据到ListBox

    1.效果图: 2.XAML <Window x:Class="WpfApplication2.MainWindow" xmlns="http://schemas.m ...