目录
Map集合概述
InterfaceMapK键的类型;V值的类型
将键映射到值的对象;不能包含重复的键;每个键可以映射到最多一个值
创建Map集合的对象
多态的方式
具体的实现类HashMap
- package zyy07;
-
-
- import java.util.HashMap;
- import java.util.Map;
- import java.util.TreeSet;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- Map
map=new HashMap(); - //put
- map.put("0124","zyy");
- map.put("0828","jw");
- map.put("0828","jwei");//输出这个,因为它会替代前一个
- map.put("1014","hwj");
- System.out.println(map);
-
-
- }
- }

- package zyy07;
-
-
- import java.util.HashMap;
- import java.util.Map;
- import java.util.TreeSet;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- Map
map=new HashMap(); - //put
- map.put("0124","zyy");
- map.put("0828","jw");
- map.put("0828","jwei");//输出这个,因为它会替代前一个
- map.put("1014","hwj");
- System.out.println(map);
- //remove
- System.out.println(map.remove("0124"));
- //System.out.println(map.remove(0810));
- //clear
- //map.clear();
- //containsKey
- System.out.println(map.containsKey("0828"));
- System.out.println(map.containsKey("0206"));
- //containsValue
- System.out.println(map.containsValue("hwj"));
- System.out.println(map.containsValue("zyy"));
- //isEmpty
- System.out.println(map.isEmpty());
- //size
- System.out.println(map.size());
- System.out.println(map);
-
- }
- }

- package zyy07;
-
-
- import java.util.*;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- Map
map=new HashMap(); - //put
- map.put("0124","zyy");
- map.put("0828","jw");
- map.put("0828","jwei");//输出这个,因为它会替代前一个
- map.put("1014","hwj");
- System.out.println(map);
- //get
- System.out.println(map.get("0124"));
- //set
keySet - Set
ky=map.keySet(); - for(String s:ky){
- System.out.println(s);
- }
- //Collection
values - Collection
v=map.values(); - for(String s:v){
- System.out.println(s);
- }
-
- }
- }
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
遍历思路
把所有的丈夫给集中起来
遍历丈夫的集合,获取到每一个丈夫根据丈夫去找对应的妻子
转换为Map集合中的操作:
获取所有键的集合。用kevSet()方法实现
遍历键的集合,获取到每一个键。用增强for实现根据键去找值。用get(Obiectkev)方法实现
- package zyy07;
-
-
- import java.util.*;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- Map
map=new HashMap(); - //put
- map.put("0124","zyy");
- map.put("0828","jw");
- map.put("0828","jwei");//输出这个,因为它会替代前一个
- map.put("1014","hwj");
- System.out.println(map);
- //set
keySet - Set
ky=map.keySet(); - for(String s:ky){
- String v=map.get(s);
- System.out.println(s+","+v);
- }
-
- }
- }
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
遍历思路
获取所有结婚证的集合
遍历结婚证的集合,得到每一个结婚证根据结婚证获取丈夫和妻子
转换为Map集合中的操作:
获取所有键值对对象的集合
Set> entrySet():获取所有键值对对象的集合 遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个Map.Entry根据键值对对象获取键和值
用getKey0得到键用getValue()得到值
- package zyy07;
-
-
- import java.util.*;
-
- public class Demo {
- public static void main(String[] args) {
- //创建集合对象
- Map
map=new HashMap(); - //put
- map.put("0124","zyy");
- map.put("0828","jw");
- map.put("0828","jwei");//输出这个,因为它会替代前一个
- map.put("1014","hwj");
- System.out.println(map);
- Set
> e = map.entrySet(); - for(Map.Entry
m:e){ - String s1=m.getKey();
- String s2=m.getValue();
- System.out.println(s1+","+s2);
- }
- }
- }
需求:创建一个HashMap集合,键是学号(String),值是学生对象(Student)。存储三个键值对元素,并遍历
思路:
①定义学生类
②创建HashMap集合对象
③ 创建学生对象
④把学生添加到集合
⑤遍历集合
方式1:键找值
方式2:键值对对象找键和值
学生类:
package com.test; public class student { //成员变量 private String name; private int age; //构造方法 public student(){ } public student(String name,int age){ this.name=name; this.age=age; } //成员方法 public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.age=age; } public int getAge(){ return age; } }测试类:
package com.test; import java.util.HashMap; import java.util.Map; import java.util.Set; public class studentdemo { public static void main(String[] args) { //创建集合对象 HashMaph=new HashMap (); //创建学生对象 student s1=new student("zyy",10); student s2=new student("zy",11); student s3=new student("z",12); //把学生添加到集合 h.put("0124",s1); h.put("012",s2); h.put("01",s3); //遍历集合1:键找值 Setk = h.keySet(); for(String s: k){ student v=h.get(s); System.out.println(s+","+v.getName()+","+v.getAge()); } System.out.println("***********"); //遍历集合2:键值对对象找键核值 Set> e = h.entrySet(); for(Map.Entryv:e){ String key =v.getKey(); student va=v.getValue(); System.out.println(key+","+va.getName()+","+va.getAge()); } } }
需求:创建一个HashMap集合,键是学生对象(Student),值是居住地(String)。存储多个键值对元素,并遍历。
要求保证键的唯一性:如果学生对象的成员变量值相同,我们就认为是同一个对象
思路:
定义学生类
创建HashMap集合对象创建学生对象
把学生添加到集合遍历集合
在学生类中重写两个方法
hashCode()equals()
学生类:
package com.test; public class student { //成员变量 private String name; private int age; //构造方法 public student(){ } public student(String name,int age){ this.name=name; this.age=age; } //成员方法 public void setName(String name){ this.name=name; } public String getName(){ return name; } public void setAge(int age){ this.age=age; } public int getAge(){ return age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; student student = (student) o; if (age != student.age) return false; return name != null ? name.equals(student.name) : student.name == null; } @Override public int hashCode() { int result = name != null ? name.hashCode() : 0; result = 31 * result + age; return result; } }测试类:
package com.test; import java.util.HashMap; import java.util.Map; import java.util.Set; public class studentdemo { public static void main(String[] args) { //创建集合对象 HashMaph=new HashMap (); //创建学生对象 student s1=new student("zyy",10); student s2=new student("zy",11); student s3=new student("z",12); student s4=new student("z",12); //把学生添加到集合 h.put(s1,"洛阳"); h.put(s2,"厦门"); h.put(s3,"云南"); h.put(s4,"新疆"); //遍历集合1:键找值 Setk = h.keySet(); for(student s: k){ String v=h.get(s); System.out.println(v +","+s.getName()+","+s.getAge()); } System.out.println("***********"); //遍历集合2:键值对对象找键核值 Set> e = h.entrySet(); for(Map.Entryv:e){ student key =v.getKey(); String va=v.getValue(); System.out.println(va+","+key.getName()+","+key.getAge()); } } }