第七讲Map接口及其实现类HashMap

上传人:飞*** 文档编号:48809939 上传时间:2018-07-20 格式:PPT 页数:21 大小:465KB
返回 下载 相关 举报
第七讲Map接口及其实现类HashMap_第1页
第1页 / 共21页
第七讲Map接口及其实现类HashMap_第2页
第2页 / 共21页
第七讲Map接口及其实现类HashMap_第3页
第3页 / 共21页
第七讲Map接口及其实现类HashMap_第4页
第4页 / 共21页
第七讲Map接口及其实现类HashMap_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《第七讲Map接口及其实现类HashMap》由会员分享,可在线阅读,更多相关《第七讲Map接口及其实现类HashMap(21页珍藏版)》请在金锄头文库上搜索。

1、实用数据结构E-MAIL: java_(java2013)*1第七讲 Map接口及其实现类HashMap*2Map接口HashMap类本讲内容*3集合类的结构 Set中的数据对象没有顺序且不可以重复 List中的数据对象有顺序且可以重复 SortedSet是一个按照升序排列元素的Set SortedMap是一个按照升序排列key的Map*4Map接口-定义Map接口与Collection接口无关系 ,它表示的集合内部每个元素是一 个键-值对。Map看起来比较像由映射组成的 Set。*5*6键不允许重复:关键字(key)是以后用于检索值的对 象。给定一个关键字和一个值,可以存储这个映射到一 个M

2、ap对象中。当这个值被存储以后,就可以使用它的 关键字来检索它,所以要求键对象必须是唯一的。每个键最多只能映射到一个值。映射使用两个基本操作:get( )和put( )。使用put( )方 法可以将一个指定关键字和值加入映射。为了得到值, 可以通过将关键字作为参数来调用get( )方法,调用返 回该值。Map接口-特点1键最多只包含一 个null,而值可以 有多个null*7对象在Map中的存储位置:键决定了对象在映射中 的存储位置,但并不是键本身决定的,需要通过一种 散列(哈希)技术进行处理,从而产生一个被称作散列 (哈希)码的整数值,散列码通常用作一个偏置量,该 偏置量是相对于分配给映射的

3、内存区域的起始位置的, 由此来确定存储对象在映射中的存储位置。无序映射:与放入Map中的次序无关Map接口-特点2*8Map接口中的集合Map接口提供三种collection 视图:允许以键集、值 集或键-值映射关系集的形式查看某个映射的内容。允 许以三种方法将映射视作集合,这三种方法就是: keySet、values 和 entrySet: lkeySet是映射中包含的键集: Set keys=map.keySet()lvalues是映射中的值的集合:Collections values=map.values();lentrySet 是包含在映射中的键-值对的集: Set kvs=map.e

4、ntrySet(); /kvs内容为Map.Entry的集合*9Map接口常用方法voidclear() 从此映射中移除所有映射关系booleancontainsKey(Object key) 如果此映射包含指定键 的映射关系,则返回 true。booleancontainsValue(Object value) 如果此映射将一个 或多个键映射到指定值,则返回 true。booleanisEmpty() 如果此映射未包含键-值映射关系,则返回 true。intsize() 返回此映射中的键-值映射关系数。SetkeySet() 返回此映射中包含的键的 Set 视图。SetentrySet()

5、返回此映射中包含的映射关系的 Set 视图Collectionvalues() 返回此映射中包含值的 Collection 视图。9*10 10Vget(Object key) 返回指定键所映射的值;如果 此映射不包含该键的映射关系,则返回 null。Vput(K key, V value)将指定的值与此映射中的指 定键关联(可选操作)。voidputAll(Map m) 从指 定映射中将所有映射关系复制到此映射中(可选操 作)。Vremove(Object key) 如果存在一个键的映射关系 ,则将其从此映射中移除(可选操作)。inthashCode() 返回此映射的哈希码值。boolean

6、 equals(Object o) 比较指定对象与此映射是否相等。Map接口常用方法(续)*11Map接口常用实现类主要有:HashMap, LinkedHashMap,TreeMap, Hashtable, PropertiesHashtable,Properties是JDK1.0/1.1中的。HashMap对key进行散列。LinkedHashMap是链接式存储的HashMap。TreeMap按照key进行排序。和Set类似,HashMap的速度通常都比TreeMap快,只 有在需要排序的功能的时候,才使用TreeMap。*12HashMap类基于哈希表的Map接口的实现如果经常需要添加、

7、删除和定位映射关系,建议利用 HashMap类实现Map集合,不过在遍历集合时,得到的 映射关系是无序的。影响性能的因素:初始容量 加载因子不要将HashMap的初始化容量设得过高, 或者load factor过低。*13HashMap类在使用由HashMap类实现的Map集合时,需要重写 作为主键对象类的hashCode()方法,在重写hashCode() 方法时,有以下两条基本原则: (1)不唯一原则:不必为每个对象生成一个唯一的 哈希码,只要通过hashCode方法生成的哈希码能够利用 get()方法得到利用put()方法添加的映射关系就可以。 (2)分散原则:生成哈希码的算法应尽量使哈

8、希码 的值分散一些,不要很多哈希码值都集中在一个范围内, 这样有利于提高由HashMap类实现的Map集合的性能。*14HashMap类不同步的,并且允许null。Map m =Collections.synchronizedMap(new HashMap(.); *15Map使用举例(2-1)public class HashMapTest public void go()Map map=new Hash Map (); map.put(“Jack“,“13000001111“); map.put(“Mary“,“13111110000“);map.put(“Tom“,“1333333222

9、2“);map.put(“Jack“,“13800008888“); /覆盖掉第一个值System.out.println(map);System.out.println(“是否有Mary的电话号码:“+map.containsKey(“Mary“);String Code=map.get(“Tom“);System.out.println(“Tom的电话是:”+Code);map.remove(“Tom“); /删除Tom的记录 System.out.println(map);Set nameSet= map.keySet();System.out.println(nameSet);Coll

10、ection telColl=map.values();System.out.println(telColl);Set entrySet=map.entrySet();System.out.println(entrySet); 【未完,接下一页】*16Map使用举例(2-2)public static void main(String argvs)new HashMapTest().go(); *17HashMap类-程序实例某软件培训基地学员应聘至外企工作,每个学员都 会有一个英文名字,对应该学员对象 Jack北京中心毕业的李明 Rose天津中心毕业的刘丽希望通过英文名字,获得该学员对象的详

11、细信息,如 何实现存储方式如何选择?元素个数不确定使用集合类通过key(英文名称)获得value(学员对象)存储对象如何确定?类型:学员属性:中心名称、姓名*18第一步,确定存储方式 1、Map接口用于维护“键-值对”的关联性,可以 通过键查找值2、HashMap是Map接口的一个具体实现类 HashMap类-程序实例*19第二步:确定存储对象 1、创建类型:学员 2、包含属性:中心名称、姓名HashMap类-程序实例*20HashMap类-程序实例 第三步:具体实现 1、把英文名字与学员对象按照“键-值对”的方式存 储在HashMap中 2、分别打印键集、值集、以及键-值对集合 3、判断是否存在某个键,如果存在则根据键获取 相应的值 4、根据键、删除某条记录*21上机编程实战创建一个Book类 l包含属性:title(标题),使用构造方法进行 初始化 l重写toString()方法,用以返回Title属性的值 创建一个BookTest测试类,添加main方法, 要求: l使用HashMap进行存储,键为Book对象的编 号,值为Book对象 l通过某一个编号获取Book对象,并打印该 Book对象的标题

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号