Map
一、Map集合
1.概述
- Interface Map<K,V> K:键的类型 V:值的类型
- 将键映射到值的对象
- 不能包含重复的键
- 每个键最多映射到一个值
2.创建Map集合的对象
用多态的方式创建,利用具体的实现类HashMap。
3.Map集合的基本功能
1)V put(K key,V value):添加元素(键第二次出现时会替代前一次内容)
2)V remove(Object key):根据键删除对应的元素
3)void clear():移除所有键对应的元素
4)boolean containsKey(Object key):判断集合是否包含指定的键
5)boolean containsValue(Object value):判断集合是否包含指定的值
6)boolean isEmpty():判断集合是否为空
7)int size():集合长度即键的个数
4.Map集合的获取功能
1)V get(Object key):根据键获取值
2)Set <K> keySet():获取所有键的集合
3)Collection <V> values():获取所有值的集合
4)Set <Map.Entry <K,V> > entrySet():获取所有键值对对象的集合
5.Map集合的遍历
方式一:用keySet()方法获取所有键的集合,用增强for遍历键的集合并获取每一个键,用get(Object key)方法根据键去找值。
方式二:用Set <Map.Entry <K,V> > entrySet()方法获取所有键值对对象的集合,用增强for遍历键值对对象的集合并获取每一个键值对对象,用getKey()方法得到键,用getValue()方法得到值。
二、案例一
1.需求
创建一个HashMap集合,键是学号(String),值是学生对象(Student),存储元素并遍历集合。
2.思路
- 定义学生类
- 创建HashMap集合对象
- 创建学生对象
- 向集合中添加元素
- 遍历集合
3.代码实现
Student类:
package HashMapStudy;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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;
}
}
Demo:
package HashMapStudy;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) {
//创建集合对象
HashMap<String,Student> hm = new HashMap<String,Student>();
//创建学生对象
Student s1 = new Student("qwe",11);
Student s2 = new Student("asd",12);
Student s3 = new Student("zxc",13);
//添加元素
hm.put("js001",s1);
hm.put("js002",s2);
hm.put("js003",s3);
//遍历
Set<String> set = hm.keySet();
for(String s : set){
Student student = hm.get(s);
System.out.println(s + "," + student.getName() +"," + student.getAge());
}
System.out.println("--------");
Set<Map.Entry<String, Student>> entrySet = hm.entrySet();
for (Map.Entry<String, Student> stringStudentEntry : entrySet) {
System.out.println(stringStudentEntry.getKey()+","+stringStudentEntry.getValue().getName()+","+stringStudentEntry.getValue().getAge());
}
}
}
三、案例二
1.需求
创建一个HashMap集合,键是学生对象(Student),值是居住地(String),存储元素并遍历集合,如果学生的成员变量值相同时,则认为是同一对象。
2.思路
- 定义学生类
- 创建HashMap集合对象
- 创建学生对象
- 向集合中添加元素
- 遍历集合
- 重写两个方法(保证键的唯一性)
3.代码实现
Student类:
package HashMapStudy;
public class Student {
private String name;
private int age;
public Student() {
}
public Student(String name, int age) {
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;
}
}
Demo类:
package HashMapStudy;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class Demo2 {
public static void main(String[] args) {
//创建集合对象
HashMap<Student,String> hm = new HashMap<Student,String>();
//创建学生对象
Student s1 = new Student("qwe",11);
Student s2 = new Student("asd",12);
Student s3 = new Student("zxc",13);
//添加元素
hm.put(s1,"扬州");
hm.put(s2,"盐城");
hm.put(s3,"淮安");
//遍历
Set<Student> set = hm.keySet();
for(Student s : set){
// Student student = hm.get(s);
System.out.println(hm.get(s) + "," + s.getName() +"," + s.getAge());
}
System.out.println("--------");
Set<Map.Entry<Student, String>> entrySet = hm.entrySet();
for (Map.Entry<Student, String> entry : entrySet) {
System.out.println(entry.getKey().getName()+","+entry.getKey().getAge()+","+entry.getValue());
}
}
}