需求::

每一个学生都有对应的归属地。

学生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);

}

}

}

注释:注解有不明白的地方欢迎留言交流,一同学习。