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. 剑指Offer:面试题5——从尾到头打印链表(java实现)

    问题描述:输入一个链表的头结点,从尾巴到头反过来打印出每个结点的值. 首先定义链表结点 public class ListNode { int val; ListNode next = null; L ...

  2. Java将Unix时间戳转换成指定格式日期

    public String TimeStamp2Date(String timestampString, String formats){     Long timestamp = Long.pars ...

  3. USACO Section 3.3 骑马修栅栏 Riding the Fences

    题目背景 Farmer John每年有很多栅栏要修理.他总是骑着马穿过每一个栅栏并修复它破损的地方. 题目描述 John是一个与其他农民一样懒的人.他讨厌骑马,因此从来不两次经过一个栅栏.你必须编一个 ...

  4. pb中打开窗口并传递参数

    try long ll_result; ll_result=1;openwithparm(w_sb_order,UserCode);catch(RuntimeError er)  errorMsg=e ...

  5. C++断言与静态断言

    断言是很早之前就有的东西了,只需要引入cassert头文件即可使用.往往assert被用于检查不可能发生的行为,来确保开发者在调试阶段尽早发现“不可能”事件真的发生了,如果真的发生了,那么就表示代码的 ...

  6. kickstart bonding安装

    bonding用的是最简单的负载均衡模式,交换机不需要做配置. https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Lin ...

  7. js中字符串,数字之间转换的常用方法

    var number={ num:, num1:"2你好" }; //将数字转换为字符串 var str=number.num.toString();//十进制 );//二进制 ) ...

  8. 【Framework】HTTP运行期与页面执行模型

    HTTP运行期 HTTP运行期处理客户端应用程序(例如Web浏览器)进入的一个Web请求,通过处理它的应用程序的适当组件路由请求,然后产生响应并发回提出请求的客户端应用程序. 进入的HTTP Web请 ...

  9. java实验报告三 敏捷开发与XP

    20145306 java 实验三 实验报告 实验内容 1.git下载结对同学的代码 2.修改结对同学的代码 3.实现代码重构 实验步骤 新建存储空间 git下载代码 将修改后的代码上传 上传结果 重 ...

  10. 【c实现,vc6调试通过】给出一字符串指针,计算出字符串指针中单词数

    #include <stdio.h> /* 给出一字符串指针,计算出字符串指针中单词数, 单词不包括'.',',',';','?','_','"',由0-9数字或26个字母组成 ...