第一讲 Map概述&子类对象特点&共性方法
1、 定义
Map集合:该集合存储键值对,一对一对的往里存,而且要保证键是唯一的。若存了重复的键,那么对应此键的值将被后一个覆盖。
2、 Map子类对象特点
Map集合有如下三个子类:
l Hashtable:底层是哈希表数据结构,不可存入null键或null值。线程同步,JDK1.0就有,效率稍低。
l HashMap:底层是哈希表数据结构,可以存入null键或null值。线程同步,JDK1.2出现,效率较高。
l TreeMap:底层是二叉树数据结构,线程不同步,可以用于给Map集合进行排序。
3、 Map集合中操作数据的功能
1) 添加元素
l Put(K key , V value)——将一个键值对存入Map集合中,如果集合中已存在相同的键,返回该键对应的值;如果集合中没有相同的键,则返回Null。
l putAll(Map<? Extends K , ? extends V> m)——将一个Map集合中所以的键值存入另一个Map集合中
2) 删除
l Clear()——清空Map集合中;
l Remove(Object key)——删除键key对应的元素,并返回值;
3) 判读
l containsValue(Object value)——按值判断map集合中是否存在对应的元素;
l containsKey(Object key)——按键判断map集合中是否存在对应的元素;
l isEmpty()——判断Map集合是否为空;
4) 获取
get(Object key)——根据键获取map集合中的元素;
size()——获取map集合中原元素个数;
values()——获取map集合中所有的值
代码实现如下:
第二讲 Map集合的两种取出方式:keySet和entrySet
1、 获取Map集合中元素的思路:map中用根据键获取值的方法get(),如果我们能获取到集合中所有的键,那就可以利用get()方法来获取集合中的值了。
2、 利用keyset方式来取出Map集合中的元素
思路:Keyset方法可以获取到集合中所有的键,并将这些键存入Set集合中。然后我们可以通过迭代器读取Set中的键,再利用get()获取每一个键对应的值。
代码实现如下:
3、 利用entrySet方式来取出Map集合中的元素
思路:通过entrySet()方法可以获取Map集合中的映射关系(Map.Entry<K,V>),并存入Set集合中。通过映射关系接口Map.Entry<K,V>中的getKey()和getValue()方法来获取关系中的键和值。
Map.Entry说明: Entry也是一个接口,它是Map接口中的一个内部接口,而且是静态的,可通过外部接口直接调用。注意:内部接口由内部类来实现。
代码实现如下:
4、 练习
题目:每一个学生都有对应的归属地,学生属性有:姓名、年龄,当姓名和年龄相同时视为同一个学生。要保证学生的唯一性
思路:
l 描述学生;
l 定义Map容器,将学生作文 键,地址作为值,存入容器;
l 获取Map集合中的元素;
代码实现如下:
5、 Map集合扩展
当键和值不是一对一关系,而是一对多关系,而多个对象又有键值对关系,此时需要利用嵌套map集合的方式存储。
解决思路:可以先将多个对象封装到一个Map集合中,然后再将给集合和键存入外面的Map集合中。
代码实现如下:
知识点总结
1、 Map 中的键和值都是一对一关系,且键在Map中必须是唯一的。若存在一对多的关系时,可以使用嵌套map集合的方式进行存储,即,将多个对象先存放在内嵌map集合中,然后将此集合存入另一个map集合中。
2、 取得map集合中所有值的方法有如下三种
l Collection<V> values();
l keySet方式
思路:先获取Map集合键,然后根据键取值。
l entrySet方式
思路:先获取Map集合中的映射关系,然后利用获取的映射关系来获取Map集合中的值。