提供一种存储空间可变的存储模型,存储的数据容量可以随时发生改变
我们要学习集合那首先得知道集合的体系结构:
集合的体系图:
通过图可以看出集合分为单列集合和双列集合,我们这里主要将双列集合。
一、Map集合概述和特点
概述:
interface MapK:键的类型;V:值的类型
特点
- 键值对映射关系
- 一个键对应一个值
- 键不能重复,值可以重复
- 元素存取无序
Map集合基础使用示例代码
public class MapDemo01 {
public static void main(String[] args) {
//创建集合对象
Map map = new HashMap();
//V put(K key, V value) 将指定的值与该映射中的指定键相关联
map.put("itheima001","林青霞");
map.put("itheima002","张曼玉");
map.put("itheima003","王祖贤");
map.put("itheima003","柳岩");
//输出集合对象
System.out.println(map);
}
}
二、方法介绍
| 方法名 | 说明 |
|---|---|
| V put(K key,V value) | 添加元素 |
| V remove(Object key) | 根据键删除键值对元素 |
| void clear() | 移除所有的键值对元素 |
| boolean containsKey(Object key) | 判断集合是否包含指定的键 |
| boolean containsValue(Object value) | 判断集合是否包含指定的值 |
| boolean isEmpty() | 判断集合是否为空 |
| int size() | 集合的长度,也就是集合中键值对的个数 |
三、Map集合的获取功能
| 方法名 | 说明 |
|---|---|
| V get(Object key) | 根据键获取值 |
| Set keySet() | 获取所有键的集合 |
| Collection values() | 获取所有值的集合 |
| Set | 获取所有键值对对象的集合 |
Map集合是一个接口,所以我们创建对象都是用它的实现类HashMap实现
Map集合的遍历主要两种方式:
方式一:
步骤:
- 获取所有键值对对象的集合
- Set
> entrySet():获取所有键值对对象的集合
- Set
- 遍历键值对对象的集合,得到每一个键值对对象
- 用增强for实现,得到每一个Map.Entry
- 根据键值对对象获取键和值
- 用getKey()得到键
- 用getValue()得到值
示例代码
public class MapDemo02 {
public static void main(String[] args) {
//创建集合对象
Map map = new HashMap();
//添加元素
map.put("张无忌", "赵敏");
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
//获取所有键值对对象的集合
Set> entrySet = map.entrySet();
//遍历键值对对象的集合,得到每一个键值对对象
for (Map.Entry me : entrySet) {
//根据键值对对象获取键和值
String key = me.getKey();
String value = me.getValue();
System.out.println(key + "," + value);
}
}
}
方式二:
步骤:
- 获取所有键的集合。用keySet()方法实现
- 遍历键的集合,获取到每一个键。用增强for实现
- 根据键去找值。用get(Object key)方法实现
示例代码
public class MapDemo01 {
public static void main(String[] args) {
//创建集合对象
Map map = new HashMap();
//添加元素
map.put("张无忌", "赵敏");
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
//获取所有键的集合。用keySet()方法实现
Set keySet = map.keySet();
//遍历键的集合,获取到每一个键。用增强for实现
for (String key : keySet) {
//根据键去找值。用get(Object key)方法实现
String value = map.get(key);
System.out.println(key + "," + value);
}
}
}
Map常见面试题
1、List 和 Map 区别?
一般从数据结构和存储特点两个方面回答。
1.数据结构方面,List存储的是单列数据的集合,而Map存储的是key、value类型的数据集合。
2.数据存储方面,List存储的数据是有序且可以重复的,而Map中存储的数据是无序且key值不能重复(value值可以重复)。
2、HashMap和Hashtable的区别
HashMap和Hashtable都实现了Map接口
1.Hashtable是线程安全的,也就是说是线程同步的,而HashMap是线程不安全的。也就是说在单线程环境下应该用HashMap,这样效率更高。
2.HashMap允许将null值作为key或value,但Hashtable不允许而且还会抛出NullPointerException异常。



