目录
1.Map
1.1Map集合概述和使用
Map集合概述
InterfaceMap<KV>K键的类型;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<String,String> map=new HashMap<String,String>();
//put
map.put("0124","zyy");
map.put("0828","jw");
map.put("0828","jwei");//输出这个,因为它会替代前一个
map.put("1014","hwj");
System.out.println(map);
}
}
1.2Map集合的基本功能
package zyy07;
import java.util.HashMap;
import java.util.Map;
import java.util.TreeSet;
public class Demo {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map=new HashMap<String,String>();
//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);
}
}
1.3Map集合的获取功能
package zyy07;
import java.util.*;
public class Demo {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map=new HashMap<String,String>();
//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<k>keySet
Set<String> ky=map.keySet();
for(String s:ky){
System.out.println(s);
}
//Collection<V> values
Collection<String> v=map.values();
for(String s:v){
System.out.println(s);
}
}
}
1.4Map集合的遍历
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
遍历思路
把所有的丈夫给集中起来
遍历丈夫的集合,获取到每一个丈夫根据丈夫去找对应的妻子
转换为Map集合中的操作:
获取所有键的集合。用kevSet()方法实现
遍历键的集合,获取到每一个键。用增强for实现根据键去找值。用get(Obiectkev)方法实现
package zyy07;
import java.util.*;
public class Demo {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map=new HashMap<String,String>();
//put
map.put("0124","zyy");
map.put("0828","jw");
map.put("0828","jwei");//输出这个,因为它会替代前一个
map.put("1014","hwj");
System.out.println(map);
//set<k>keySet
Set<String> ky=map.keySet();
for(String s:ky){
String v=map.get(s);
System.out.println(s+","+v);
}
}
}
1.5Map集合的遍历(方式2)
我们刚才存储的元素都是成对出现的,所以我们把Map看成是一个夫妻对的集合
遍历思路
获取所有结婚证的集合
遍历结婚证的集合,得到每一个结婚证根据结婚证获取丈夫和妻子
转换为Map集合中的操作:
获取所有键值对对象的集合
Set<Map.Entry<KV>> entrySet():获取所有键值对对象的集合遍历键值对对象的集合,得到每一个键值对对象
用增强for实现,得到每一个Map.Entry根据键值对对象获取键和值
用getKey0得到键用getValue()得到值
package zyy07;
import java.util.*;
public class Demo {
public static void main(String[] args) {
//创建集合对象
Map<String,String> map=new HashMap<String,String>();
//put
map.put("0124","zyy");
map.put("0828","jw");
map.put("0828","jwei");//输出这个,因为它会替代前一个
map.put("1014","hwj");
System.out.println(map);
Set<Map.Entry<String, String>> e = map.entrySet();
for(Map.Entry<String, String> m:e){
String s1=m.getKey();
String s2=m.getValue();
System.out.println(s1+","+s2);
}
}
}
案例:HashMap集合存储学生对象并遍历
需求:创建一个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) { //创建集合对象 HashMap<String,student> h=new HashMap<String,student>(); //创建学生对象 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:键找值 Set<String> k = h.keySet(); for(String s: k){ student v=h.get(s); System.out.println(s+","+v.getName()+","+v.getAge()); } System.out.println("***********"); //遍历集合2:键值对对象找键核值 Set<Map.Entry<String, student>> e = h.entrySet(); for(Map.Entry<String, student> v:e){ String key =v.getKey(); student va=v.getValue(); System.out.println(key+","+va.getName()+","+va.getAge()); } } }
案例:HashMap集合存储学生对象并遍历
需求:创建一个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) { //创建集合对象 HashMap<student,String> h=new HashMap<student,String>(); //创建学生对象 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:键找值 Set<student> k = h.keySet(); for(student s: k){ String v=h.get(s); System.out.println(v +","+s.getName()+","+s.getAge()); } System.out.println("***********"); //遍历集合2:键值对对象找键核值 Set<Map.Entry<student,String>> e = h.entrySet(); for(Map.Entry<student,String> v:e){ student key =v.getKey(); String va=v.getValue(); System.out.println(va+","+key.getName()+","+key.getAge()); } } }