黑马程序员-Java基础---集合框架-Map

时间:2023-02-18 15:20:19

第一讲 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集合中所有的值

代码实现如下:

黑马程序员-Java基础---集合框架-Map

                      

第二讲  Map集合的两种取出方式:keySetentrySet

1、  获取Map集合中元素的思路:map中用根据键获取值的方法get(),如果我们能获取到集合中所有的键,那就可以利用get()方法来获取集合中的值了。

2、  利用keyset方式来取出Map集合中的元素

思路:Keyset方法可以获取到集合中所有的键,并将这些键存入Set集合中。然后我们可以通过迭代器读取Set中的键,再利用get()获取每一个键对应的值。

代码实现如下:

黑马程序员-Java基础---集合框架-Map

3、  利用entrySet方式来取出Map集合中的元素

思路:通过entrySet()方法可以获取Map集合中的映射关系(Map.Entry<K,V>),并存入Set集合中。通过映射关系接口Map.Entry<K,V>中的getKey()和getValue()方法来获取关系中的键和值。

Map.Entry说明: Entry也是一个接口,它是Map接口中的一个内部接口,而且是静态的,可通过外部接口直接调用。注意:内部接口由内部类来实现。

黑马程序员-Java基础---集合框架-Map

代码实现如下:

黑马程序员-Java基础---集合框架-Map

4、  练习

题目:每一个学生都有对应的归属地,学生属性有:姓名、年龄,当姓名和年龄相同时视为同一个学生。要保证学生的唯一性

思路:

l  描述学生;

l  定义Map容器,将学生作文 键,地址作为值,存入容器;

l  获取Map集合中的元素;

代码实现如下:

黑马程序员-Java基础---集合框架-Map

黑马程序员-Java基础---集合框架-Map

 

5、  Map集合扩展

当键和值不是一对一关系,而是一对多关系,而多个对象又有键值对关系,此时需要利用嵌套map集合的方式存储。

解决思路:可以先将多个对象封装到一个Map集合中,然后再将给集合和键存入外面的Map集合中。

代码实现如下:

黑马程序员-Java基础---集合框架-Map

黑马程序员-Java基础---集合框架-Map

 

知识点总结

1、  Map 中的键和值都是一对一关系,且键在Map中必须是唯一的。若存在一对多的关系时,可以使用嵌套map集合的方式进行存储,即,将多个对象先存放在内嵌map集合中,然后将此集合存入另一个map集合中。

2、  取得map集合中所有值的方法有如下三种

l  Collection<V> values();

l  keySet方式

思路:先获取Map集合键,然后根据键取值。

l  entrySet方式

思路:先获取Map集合中的映射关系,然后利用获取的映射关系来获取Map集合中的值。