需求::
每一个学生都有对应的归属地。
学生Student,地址String。
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
1,描述学生。
2,定义map容器。将学生作为键,地址作为值。存入。
3,获取map集合中的元素。
import java.util.*; //进入util包
class Student implements Comparable<Student> { //继承Comparable 接口 传递Student类型参数
private String name;
private int age;
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;
}
public int compareTo(Student s) { //覆写comparable中的唯一方法compareTo
//比较此对象与指定对象的顺序。如果该对象小于、 //等于或大 于指定对象,则分别返回负整数、零或正整数。
int num=new Integer(this.age).compareTo(new Integer(s.age));
if(num==0)
return this.name.compareTo(s.name);
return num;
}
public int hashCode() { //覆写hashCode方法 的到唯一hash值
return name.hashCode()+age*20;
}
public boolean equals(Object obj) { //覆写equals方法
if(!(obj instanceof Student))//如果传入的类型不是Student则报异常
throw new ClassCastException("类型不匹配");
Student s=(Student)obj;//类型转换
return this.name.equals(s.name)&&this.age==s.age;//比较内容不否相等
}
public String toString() {//返回name和age 的字符串
return name+"-"+age;
}
}
class MapTest {
public static void main(String []args) {
HashMap<Student,String> hm=new HashMap<Student,String>();//利用泛型约束
hm.put(new Student("lili01",11),"beijing");
hm.put(new Student("lili02",12),"shanghai");
hm.put(new Student("lili03",13),"beijing");
hm.put(new Student("lili01",11),"shanghai");
//第一种取出方式 keySet,得到key的值,在利用hashmap里的get(key)获取valuse的值
Set<Student> keySet=hm.keySet();
Iterator<Student> it=keySet.iterator();
while(it.hasNext()) {
Student stu=it.next();
String ar=hm.get(stu);
System.out.println(stu+" "+ar);
}
//第二种取出方式 entrySet
Set<Map.Entry<Student,String>> entrySet=hm.entrySet();//存放的是键值对
Iterator<Map.Entry<Student,String>> iter=entrySet.iterator();
while(iter.hasNext()) {
Map.Entry<Student,String> me=iter.next();
Student stu=me.getKey();//获取k
String addr=me.getValue();//获取v
//System.out.println(stu+" "+addr);
}
}
}
注释:注解有不明白的地方欢迎留言交流,一同学习。