/* map扩展知识。 map集合被使用是因为映射关系。 编程实现以下数据: "yureban" -> "01" "zhangsan" "yureban" -> "02" "lisi" "jiuyeban" -> "01" "wangwu" "jiuyeban" -> "02" "zhaoliu" 注意一个键对应一个值,所以根据上面的例子,应该想到这个“值”本身也要是一个集合来存储具有映射关系的多对值。 */ import java.util.*; class MapTest4 { public static void main(String[] args) { HashMap<String,HashMap<String,String>> hm=new HashMap<String,HashMap<String,String>>(); HashMap<String,String> yure=new HashMap<String,String>(); HashMap<String,String> jiuye=new HashMap<String,String>(); yure.put("01","yure_stu_001"); yure.put("02","yure_stu_002"); jiuye.put("01","jiuye_stu_01"); jiuye.put("02","jiuye_stu_02"); hm.put("yure",yure); hm.put("jiuye",jiuye); //print_1(hm,"yure"); //sop("--------"); //print_2(hm,"jiuye"); print_All1(hm); } public static void print_All1(HashMap<String,HashMap<String,String>> hm) { Set<Map.Entry<String,HashMap<String,String>>> set=hm.entrySet(); Iterator<Map.Entry<String,HashMap<String,String>>> it=set.iterator(); while(it.hasNext()) { Map.Entry<String,HashMap<String,String>> me=it.next(); String key=me.getKey(); HashMap<String,String> hash=me.getValue(); Set<Map.Entry<String,String>> s=hash.entrySet(); Iterator<Map.Entry<String,String>> it1=s.iterator(); while(it1.hasNext()) { Map.Entry<String,String> me1=it1.next(); String sub_key=me1.getKey(); String sub_value=me1.getValue(); sop(key+"....."+sub_key+"......"+sub_value); } } } public static void print_All2(HashMap<String,HashMap<String,String>> hm) { Set<String> set=hm.keySet(); //获取教室名称 Iterator<String> it=set.iterator(); while(it.hasNext()) { HashMap<String,String> hash=hm.get(it.next()); Set<Map.Entry<String,String>> s=hash.entrySet(); Iterator<Map.Entry<String,String>> it1=s.iterator(); while(it1.hasNext()) { Map.Entry<String,String> me=it1.next(); String key=me.getKey(); String value=me.getValue(); sop("print--->"+key+"..."+value); } } } public static void print_1(HashMap<String,HashMap<String,String>> hm,String room) { HashMap<String,String> hash=hm.get(room); Set<String> set=hash.keySet(); Iterator<String> it=set.iterator(); while(it.hasNext()) { String key=it.next(); String name=hash.get(key); sop(key+"..."+name); } } public static void print_2(HashMap<String,HashMap<String,String>> hm,String room) { HashMap<String,String> hash=hm.get(room); Set<Map.Entry<String,String>> set=hash.entrySet(); Iterator<Map.Entry<String,String>> it=set.iterator(); while(it.hasNext()) { Map.Entry<String,String> me=it.next(); String key=me.getKey(); String value=me.getValue(); sop(key+"..."+value); } } public static void sop(Object obj) { System.out.println(obj); } }
/* map扩展知识(续)。 编程实现存储以下结构的数据: "yureban" Student("001","zhangsan") "yureban" Student("002","lisi") "jiuyeban" Student("001","wangwu") "jiuyeban" Student("002","zaholiu") 解题分析: 不能将班级名称作为键,将学生对象作为值存入map中,因为键时重复的。 但是可以构造这样的数据结构,即班级名称对应一个集合,这个集合存储多个学生的信息。 */ import java.util.*; class Student { private String no; private String name; Student(String no,String name) { this.no=no; this.name=name; } public String getNo() { return no; } public String getName() { return name; } public boolean equals(Object obj) { if(!(obj instanceof Student)) throw new RuntimeException("不是学生对象"); Student s=(Student)obj; boolean flag=this.no.equals(s.no) && this.name.equals(s.name); //MapTest5.sop(this.no+"..."+s.no); //MapTest5.sop(flag); return flag; } } class MapTest5 { public static void main(String[] args) { HashMap<String,ArrayList<Student>> hash=new HashMap<String,ArrayList<Student>>(); ArrayList<Student> yure=new ArrayList<Student>(); yure.add(new Student("001","zhangsan001")); yure.add(new Student("002","zhangsan002")); yure.add(new Student("005","zhangsan005")); yure.add(new Student("004","zhangsan004")); yure.add(new Student("003","zhangsan003")); yure.add(new Student("003","zhangsan003")); yure=quchong(yure); hash.put("yure",yure); ArrayList<Student> jiuye=new ArrayList<Student>(); jiuye.add(new Student("001","lisi001")); jiuye.add(new Student("002","lisi002")); jiuye.add(new Student("005","lisi005")); jiuye.add(new Student("004","lisi004")); jiuye.add(new Student("003","lisi003")); jiuye.add(new Student("004","lisi004")); jiuye=quchong(jiuye); hash.put("jiuye",jiuye); //sop(hash); print(hash); /* Iterator it=yure.iterator(); while(it.hasNext()) { Student s=(Student)it.next(); sop(s.getNo()+"..."+s.getName()); } */ } public static ArrayList<Student> quchong(ArrayList<Student> al) { ArrayList<Student> arrlist=new ArrayList<Student>(); Iterator<Student> it=al.iterator(); while(it.hasNext()) { Student s=it.next(); if(!(arrlist.contains(s))) arrlist.add(s); } return arrlist; } public static void print(HashMap<String,ArrayList<Student>> hm) { Set<Map.Entry<String,ArrayList<Student>>> set=hm.entrySet(); Iterator<Map.Entry<String,ArrayList<Student>>> it=set.iterator(); while(it.hasNext()) { Map.Entry<String,ArrayList<Student>> me=it.next(); String key=me.getKey(); ArrayList<Student> al=me.getValue(); Iterator<Student> it1=al.iterator(); while(it1.hasNext()) { Student s=it1.next(); sop(key+"..."+s.getNo()+"..."+s.getName()); } } } public static void sop(Object obj) { System.out.println(obj); } }
时间: 2024-11-09 06:21:03