/*
每一个学生都有对应归属地。
学生Student 地址 String。
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
步骤:
1、描述学生。
2、定义map容器,将学生作为键,地址作为值,存入。
3、获取map集合中的元素。
*/
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
class Student4 implements Comparable<Student4>{
private String name;
private int age;
Student4(String name,int age){
this.name=name;
this.age=age;
}
//保证键的唯一性
public int hashCode(){
return name.hashCode()+age*34;
}
public boolean equals(Object obj){
if(!(obj instanceof Student4))
throw new ClassCastException("类型不匹配");
Student4 s=(Student4)obj;
return this.name.equals(s.name)&&this.age==age;
}
public String getName(){
return name;
}
public int getAge(){
return age;
}
public String toString(){
return name+":"+age;
}
@Override
public int compareTo(Student4 s) {
// TODO 自动生成的方法存根
int num=new Integer(this.age).compareTo(new Integer(s.age));
if(num==0)
return this.name.compareTo(s.name);
return num;
}
}
public class MapExercise {
public static void main(String[] args) {
HashMap<Student4,String> hm=new HashMap<Student4,String>();
hm.put(new Student4("张三",22),"北京");
//hm.put(new Student4("张三",22),"上海");
hm.put(new Student4("李四",25),"上海");
hm.put(new Student4("王五",24),"香港");
hm.put(new Student4("小张",24),"烟台");
hm.put(new Student4("小李",26),"济南");
//第一种取出方式 ketSet
Set<Student4> keySet=hm.keySet();
Iterator<Student4> it=keySet.iterator();
while(it.hasNext())
{
Student4 stu=it.next();
String addr=hm.get(stu);
System.out.println(stu+"---"+addr);
}
//第二种取出方式entrySet
Set<Map.Entry<Student4,String>> entrySet=hm.entrySet();
Iterator<Map.Entry<Student4,String>> it1=entrySet.iterator();
while(it1.hasNext())
{
Map.Entry<Student4,String> me=it1.next();
Student4 stu=me.getKey();
String addr=me.getValue();
System.out.println(stu+"====="+addr);
}
}
}
结果: