目录
1.Map
1.1Map集合概述和使用
1.2Map集合的基本功能
1.3Map集合的获取功能
1.4Map集合的遍历
1.5Map集合的遍历(方式2)
案例:HashMap集合存储学生对象并遍历
案例:HashMap集合存储学生对象并遍历
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());
}
}
}