一、Map集合的概述
Map集合:
- 将键映射到值的对象
- 一个映射不能包含重复的键
- 每个键最多只能映射到一个值
Map接口和Collection接口的不同:
- Map是双列的(是双列集合的根接口),Collection是单列的(是单列集合的根接口)
- Map的键唯一,Collection的子体系Set是唯一的
- Map集合的数据结构值针对键有效,跟值无关。
二、Map集合的功能
1.添加:
V put(K key,V value)
2.删除:
V remove(Object key):根据键删除键值对象
void clear():移除所有的键值对元素
3.判断:
boolean containsKey(Object key):判断集合是否包含指定的键
boolean containsValue(Object value):判断集合是否包含指定的值
boolean isEmpty():判断集合是否为空
4.长度:
int size();集合的长度,也就是键值对数
5.获取:
V get(Object key):根据键获取值
Set<K> keySet():获取所有键的集合
Collection<V> values():获取所有值的集合
三、Map集合的使用
1.创建集合并添加元素
2.删除
//V remove(Object key):根据键删除键值对象
map.remove("郭靖");
//void clear():移除所有的键值对元素
map.clear();
3.判断
//boolean containsKey(Object key):判断集合是否包含指定的键
System.out.println(map.containsKey("杨过"));
//boolean containsValue(Object value):判断集合是否包含指定的值
System.out.println(map.containsValue("小龙女"));
//boolean isEmpty():判断集合是否为空
System.out.println(map.isEmpty());
4.长度
//int size():集合的长度,也就是键值对数
System.out.println(map.size());
5.获取
//V get(Object key):根据键获取值
System.out.println(map.get("郭靖"));
//Set<K> keySet():获取所有键的集合
Set<String> set=map.keySet();
for(String s:set) {
System.out.println(s);
}
//Collection<V> values():获取所有值的集合
Collection<String> c=map.values();
for (String s : c) {
System.out.println(s);
}
6.遍历 主要有两种方法
方法1:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
* Map集合的遍历(方法1):
* 1.获取所有键的集合。用keySet()方法来实现
* 2.遍历键的集合,获取到每一个键。用增强for实现
* 3.根据键去找值。用get(Object key)方法实现
* */
public class MapDemo02 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建集合对象
Map<String, String> map=new HashMap<String, String>();
//添加元素
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
map.put("张若昀","唐艺昕");
//获取所有键的集合
Set<String> set=map.keySet();
//遍历键的集合,获取到每一个键
for (String key : set) {
//根据键去找值
String value=map.get(key);
System.out.println(key+","+value);
}
}
}
方法2:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
* Map集合的遍历(方式2):
* 1.获取所有键值对对象的集合
* Set<Map.Entry<K,V> entrySet():获取所有键值对对象的集合
* 2.遍历键值对对象的集合,得到每一个键值对对象
* 用增强for实现,得到每一个Map.Entry
* 3.根据键值对对象获取键和值
* 用getKey()得到键
* 用getValue()得到值
* */
public class MapDemo03 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建集合对象
Map<String, String> map=new HashMap<String, String>();
//添加元素
map.put("郭靖", "黄蓉");
map.put("杨过", "小龙女");
map.put("张若昀","唐艺昕");
//获取所有键值对对象的集合
Set<Map.Entry<String, String>> set=map.entrySet();
//遍历键值对对象的集合,得到每一个键值对对象
for (Map.Entry<String, String> entry : set) {
String key=entry.getKey();
String value=entry.getValue();
System.out.println(key+","+value);
}
}
}
输出结果:
四、案例
要求:创建HashMap集合对象,键是学号(String),值是学生类(Student),存储3个键值对元素并遍历
1.创建学生类:
public class Student {
private String name;
private int age;
public Student() {}
public Student(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
测试类:
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
/*
* 思路:
* 1.定义学生类
* 2.创建HashMap集合对象
* 3.创建学生对象
* 4.把学生添加到集合
* 5.遍历集合
* 方式1:键找值
* 方式2:键值对对象找键和值
* */
public class MapDemo04 {
public static void main(String[] args) {
// TODO Auto-generated method stub
//创建集合对象
Map<String, Student> map=new HashMap<String, Student>();
//创建学生对象
Student s1=new Student("小明",18);
Student s2=new Student("小红",20);
Student s3=new Student("小兰",28);
//把学生添加到集合
map.put("C2001", s1);
map.put("C2002", s2);
map.put("C2003", s3);
//遍历集合 方式1:键找值
Set<String> set=map.keySet();
for(String s:set) {
Student student=map.get(s);
System.out.println(s+","+student.getName()+","+student.getAge());
}
System.out.println("------------");
//遍历集合 方式2:键值对对象找键和值
Set<Map.Entry<String, Student>> entrySet=map.entrySet();
for(Map.Entry<String, Student> me:entrySet) {
String key=me.getKey();
Student value=me.getValue();
System.out.println(key+","+value.getName()+","+value.getAge());
}
}
}
输出结果: