Map中存一个对象(学号,姓名,年龄)

下面代码错了,错在哪,怎么改

 public class TestStudent {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Map<Student,Student> map = new HashMap<Student,Student>();
        map.put(new Student(902),new Student("彭杰",19));
        Set set = map.keySet();
        Iterator iterator = set.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next().number);
            System.out.println(iterator.next().name);
            System.out.println(iterator.next().age);
        }
    }

}
public class Student {

     private long number;
     private String name;
     private int age;
    public Student(String name,int age){
        this.name = name;
        this.age = age;
    }
    public Student(long number){
        this.number = number;
    }
}

map.put(new Student(902),new Student("彭杰",19));
你这个只建立了一个条目,并且把两个student一个存到key一个存到value
这么做也没错,但是可能不是你想要的,估计你想插入2次。

while (iterator.hasNext()){
System.out.println(iterator.next().number);
System.out.println(iterator.next().name);
System.out.println(iterator.next().age);
}
改成:
while (iterator.hasNext()){
Student student = (Student)iterator.next();
System.out.println(student.getName());
......
}

        System.out.println(iterator.next().number);
        System.out.println(iterator.next().name);
        System.out.println(iterator.next().age);

我怀疑你根本没搞明白map是干嘛的
它每一个迭代是一个student,而不是把student的属性打散了存到好几行

通过源码我们可以知道 HashMap里面是Entry[],每一个Entry里面有Key,Value,HashCode.和Entry链的下一个Entry 你做KeySet只是拿到了所有的Ke,也就是一个Student,而不是属性

你这样的到的应该是只有Key的值吧,而你的key又都是只有number的学生对象,遍历的话也只能是遍历key的值,输出number,没有name和age、、、

Set set = map.keySet();
Iterator iterator = set.iterator();

里面map.keySet()得到的只是map所有的key,你要得到value可以这么写:
while (iterator.hasNext()){
    Student student=(Student) map.get(iterator.next());
    }

居然没看到有一个对的,这个问题首先看错就在遍历里面这个代码块

while (iterator.hasNext()){
//这里调用了next()方法,游标已经在第一个key了,
            System.out.println(iterator.next().number);
//这里你又调用了next()方法,游标已经在第二个key了,
            System.out.println(iterator.next().name);
//这里你还是调用了next()方法,游标已经在第三个key了,
            System.out.println(iterator.next().age);
}

照你这个代码输出来的话,应该是第1个学生的学号,第2个学生的名字和第3个学生的年龄吧!!!

while (iterator.hasNext()){
Student student = iterator.next();
            System.out.println(student.number);
            System.out.println(student.name);
            System.out.println(student.age);
}

这么改就对了。

其实不知道为什么用map,如果要封装多个Student的话,直接丢到List里面就好了。

 Map<Object, Object> map = new HashMap<Object, Object>();
 map.put('stu1', new Student('name1', 19);
 map.put('stu2', new Student('name2', 20);