一、简单介绍
Map(映射)集合表示一种非常复杂的集合,允许按照某个键来访问元素。Map 集合是由两个集合构成的,一个是键(key)集合,一个是值(value)集合。键集合是 Set 类 型,因此不能有重复的元素。而值集合是Collection 类型,可以有重复的元素。Map 集合 中的键和值是成对出现的。
Map集合更适合通过键快速访问值,就像查英文字典一样,键就是要查的英文单词,而值是英文单词的翻译和解释等。有的时候,一个英文单词会对应多个翻译和解释, 这是与Map集合特性对应的。
- Map 接口直接实现类主要是 HashMap,HashMap 是基散列表数据结构的实现。
二、常用方法
Map 集合中包含两个集合(键和值),所以操作起来比较麻烦,Map 接口提供很多方法用来管理和操作集合。主要的方法如下。
1. 操作元素
get(Object key):返回指定键所对于的值;如果 Map 集合中不包含该键值对,则 返回 null。
put(Object key, Object value):指定键值对添加到集合中。
remove(Object key):移除键值对。
clear():移除 Map 集合中所有键值对。
2. 判断元素
isEmpty():判断 Map 集合中是否有键值对,没有返回 true,有返回 false。
containsKey(Object key):判断键集合中是否包含指定元素,包含返回 true,不包含返回 false。
containsValue(Object value):判断值集合中是否包含指定元素,包含返回 true, 不包含返回 false。
3、 查看集合
keySet():返回 Map 中的所有键集合,返回值是 Set 类型。
values():返回 Map 中的所有值集合,返回值是 Collection 类型。
size():返回 Map 集合中键值对数。
4、遍历集合
- Map 集合遍历与 List 和 Set 集合不同,Map 有两个集合,因此遍历过程可以只遍历值的集合,也可以只遍历键的集合,也可以同时遍历。这些遍历过程都可以使用 for-each 循环和迭代器进行遍历。
5、实例代码:
import java.util.*;
public class helloworld3 {
public static void main(String[] args) {
Map map=new HashMap();
map.put(102, "张三");
map.put(105, "李四");
map.put(109, "王五");
map.put(110, "董六");
//"李四"值重复
map.put(111, "李四");
//109键已经存在,替换原来值"王五"
map.put(109, "刘备");
// 1.使用for-each循环遍历
System.out.println("--1.使用for-each循环遍历--");
// 获得键集合
Set keys = map.keySet();
for (Object key : keys) {
int ikey = (Integer) key; // 自动拆箱
String value = (String) map.get(ikey); // 自动装箱
System.out.printf("key=%d - value=%s \n", ikey, value);
}
// 2.使用迭代器遍历
System.out.println("--2.使用迭代器遍历--");
// 获得值集合
Collection values = map.values();
// 遍历值集合
Iterator it = values.iterator();
while (it.hasNext()) {
Object item = it.next();
String s = (String) item;
System.out.println("值集合元素: " + s);
}
// 打印集合元素个数
System.out.println("集合size = " + map.size());
// 打印集合
System.out.println(map);
// 通过键取值
System.out.println("109 - " + map.get(109));
System.out.println("108 - " + map.get(108));
// 删除键值对
map.remove(109);
// 判断键集合中是否包含109
System.out.println("键集合中是否包含109:" + map.containsKey(109));
// 判断值集合中是否包含 "李四";
System.out.println("值集合中是否包含:" + map.containsValue("李四"));
// 判断集合是否为空
System.out.println("集合是空的:" + map.isEmpty());
// 清空集合
map.clear();
System.out.println(map);
}
}
--1.使用for-each循环遍历--
key=102 - value=张三
key=110 - value=董六
key=111 - value=李四
key=109 - value=刘备
key=105 - value=李四
--2.使用迭代器遍历--
值集合元素: 张三
值集合元素: 董六
值集合元素: 李四
值集合元素: 刘备
值集合元素: 李四
集合size = 5
{102=张三, 110=董六, 111=李四, 109=刘备, 105=李四}
109 - 刘备
108 - null
键集合中是否包含109:false
值集合中是否包含:true
集合是空的:false
{}
Process finished with exit code 0