导言:
1、 映射Map的学习
2、 Map的方法使用技巧
3、 如何利用纯英文的官方文档学习JAVA
亲~我们来回顾Map的知识点,回顾上节课,主要用实例来对比list和map的优缺点。(如表1)
对比 | 优点 | 缺点 |
map | 1. 使用map方法可以减少代码量; 2. 在删除和修改数据的操作的时候可以快速定位,不用遍历。 3. 为我们提供了灵活便捷的数据处理方式,可以轻松实现实用的数据结构。 | 1. 在使用map进行增加数据的时候,会增加参数,从而导致效率减低。 2. List可以直接进行查询,而map需要转换成list再进行查找。在大型数据量时会导致耗时增加。 |
list |
表1 map的优缺点
☆映射的深入理解与运用
什么是map?
还是从我们熟知的生活中来理解这个概念,想想比如我们在学校,会被老师安排座位和座号,一个座位就相当于一个键(key),而你就是一个值(value),一届又一届的轮流,这个座位上的人会不断在变,在不同时刻也许“座位”也会发生概念上变化。你通过你的座位号找到你的座位,这个过程就是映射的过程,也是理解Map的关键。
理解一下下面几点
1、 一个映射不能包含重复的键。为什么呢,在中学阶段,就是你不可能拥有两个座位,一般都是一对一的吧。
2、 每个键至多只能有一个值。你坐在你座位上,意思就是你的座位上只能坐你一个人。如果还有一个人坐在你身上,那就是侵占,属于非法。(特殊情况不考虑,你说你有个很好的机油,那木有办法啦~)
对比List和map从概念上理解
List的功能方法
基于List两种List:
1) ArrayList,其优点在于随机访问元素;
2) LinkedList,它并不是为快速随机访问设计的,而是更强大的更通用的方法。
List : 次序是List最重要的特点:它保证维护元素特定的顺序。
ArrayList : 由数组实现的List。允许对元素进行快速随机访问,但是向List中间插入与移除元素的速度很慢。
LinkedList : 对顺序访问进行了优化,向List中间插入与删除的开销并不大。随机访问则相对较慢。
map的功能方法
上文解释了键值的概念,理解map应该就不会难了。在老师写的关于map的第一行代码就用到了put。
方法put(Objectkey, Object value)
添加需要的一个“值”(想要得东西,比如代码中的水果)和与“值”相关联的“键”(key)(使用它来查找)。(如图1)
图1
方法get(Objectkey)
返回与给定“键”相关联的“值”(如图2)。当然也可以利用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。
图2
◎课堂上涉及到基于Map的几个类
Map : 维护“键值对”的关联性,使你可以通过“键”查找“值”
TreeMap : 基于红黑树数据结构的实现。查看“键”或“键值对”时,它们会被排序(次序由Comparabel或Comparator决定)。TreeMap的特点在于,你得到的结果是经过排序的。
HashMap : 基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了不同步和允许使用 null 之外,HashMap 类与Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
HashTable: Hashtable是基于陈旧的Dictionary类的,HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以,只容许有一个null值的key,可以有多个null值的value)。
SequenceHashMap:封装好的一个基于Map,在输出排序时保证输出的值是有次序的。需要加一个JAR包:commons-collections.jar
对比List和map从代码上鸟瞰
使用Map和Map的一般过程对比
List|Map对比 | Map | List |
步骤1 | 声明一个Map: Map map = new HashMap();//创建映射 | 声明一个List: List list0=new ArrayList(); List list1=new ArrayList(); |
步骤2 | 向map中放值,注意: map是key-value的形式存放的,如: map.put("001","苹果"); | 向list中插入键值,由于没有像map中 的键值对应故有步骤1的list0与list1; 代码如: list0.add("001"); list1.add("苹果") |
步骤3 | 从map中取值: String name=(String)map.get(“001”); 结果是: name = 苹果 | 要进行查找遍历,利用for循环进行遍历 |
步骤4 | 遍历一个map,从中取得key和value; |
表2 Map和Map的一般过程对比
了解 Map 接口和方法(尝试阅读官方文档进行学习)
课堂基本思路
图3
图3 int size()返回 Map 中的键-值映射的数目
图4
图4 get(Objectkey) 返回与指定键关联的值
图5
图5 isEmpty()如果 Map 不包含键-值映射,则返回 true
图6
图6 containsValue(Objectvalue) 如果此 Map 将一个或多个键映射到指定值,则返回 true
细节知识点学习
① int size()返回键值映射的数目(如图7),如果出现两条记录相同,按一条记录算。
图7
② isEmpty()
如果Map中不包含键值映射,返回true.若包含则键值则返回false.(如图8)
图8
③containsKey
上文提到是用来判断Map中是否包含指定键的映射,是的话,返回true.(如图9)
图9
④containsValue
如果Map中可以找到键值对应,就是就返回ture,代码类似containsKey,参考图9。
⑤remove
删除map中键值的对应关系的值,销毁了键值。
⑥putAll
从指定的所有的映射键值关系复制到新的键值关系中。(如图10)
图10
⑦ entrySet 返回所包含映射的set视图,set中每个值都是entrySet 对象,所以使用getKey()和getValue()返回后者的键值。(如图11)
图11
⑧ keyset
返回所包含映射的set视图,set中每个值都是keyset对象,返回键,代码类似entrySet ,参考图11。