本帖最后由 up.yfei 于 2013-5-9 19:56 编辑
先看下代码:- import java.util.*;
- /*
- 每一个学生都有对应的归属地。
- 学生Student,地址String。
- 学生属性:姓名,年龄。
- 注意:姓名和年龄相同视为同一个学生。
- 保证学生的唯一性。
- 1,描述学生。
- 2,定义Map容器,将学生作为键,地址作为值,存入。
- 3,获取Map集合中的元素。
- */
- class Student implements Comparable<Student>
- {
- private String name;
- private int age;
- Student(String name,int age)
- {
- this.name=name;
- this.age=age;
- }
- public boolean equals(Object obj)
- {
- if(!(obj instanceof Student))
- throw new ClassCastException("类型不匹配");
- Student s = (Student)obj;
- return this.name.equals(s.name) && this.age==s.age;
- }
- public int hashCode()
- {
- return name.hashCode()+age*21;
- }
- public int compareTo(Student s)
- {
- int num = new Integer(this.age).compareTo(new Integer(s.age));
- if(num == 0)
- return this.name.compareTo(s.name);
- return num;
- }
- public String getName()
- {
- return name;
- }
- public int getAge()
- {
- return age;
- }
- }
- class MapTest
- {
- public static void main(String[] args)
- {
- HashMap<Student,String> hm = new HashMap<Student,String>();
- hm.put(new Student("张三",21),"北京");
- hm.put(new Student("李四",22),"上海");
- hm.put(new Student("王五",23),"河南");
- hm.put(new Student("赵六",24),"天津");
- Set<Map.Entry<Student,String>> sme = hm.entrySet();
- Iterator<Map.Entry<Student,String>> it = sme.iterator();
- while(it.hasNext())
- {
- Student key = it.next().getKey();
- String value = it.next().getValue();
- System.out.println("姓名:"+key.getName()+"\t年龄:"+key.getAge()+"\t\t地址:"+value);
- }
- }
- }
复制代码 就是说,我现在的代码,运行出来有问题
结果是:
这是为什么?
如果把while循环里的
Student key = it.next().getKey();
String value = it.next().getValue();
这两个代码改成
Map.Entry<Student,String> me = it.next();
Student key = me.getKey();
String value = me.getValue();
就没问题了,这是为什么?这两种有什么不同么?
感谢各位,谢谢
|