黑马程序员技术交流社区

标题: map方法问题 [打印本页]

作者: 尹善波    时间: 2012-7-17 01:28
标题: map方法问题
一个学校多个教室的例子
import java.util.*;
class Student
{
  private String id;
  private String name;
  Student(String name,String id)
  {
    this.id=id;
this.name=name;
  }
  public String toString()
  {
     return id+"..."+name;
  }
}
class MapDemo3
{
public static void main(String[] args)
{
  demo();
}
public static void demo()
{
    HashMap<String ,List<Student>> hm=new HashMap<String,List<Student>>();
    List<Student> yure=new ArrayList<Student>();
    List<Student> jiuye=new ArrayList<Student>();

    hm.put("yureban",yure);
    hm.put("jiuyeban",jiuye);
    yure.add(new Student("zhangsan01","21"));
    yure.add(new Student("zhangsan02","22"));
    jiuye.add(new Student("zhangsan03","23"));
    jiuye.add(new Student("zhangsan04","24"));

    Iterator<String> it=hm.keySet().iterator();//这句是不是就调用了keyset方法了?
    while (it.hasNext())
    {
       String roomName=it.next();
    List<Student> room=hm.get(roomName);
    System.out.println(roomName);
    getInfos(room);
    }
}
public static void getInfos(List<Student> list)
{
   Iterator<Student> it1=list.iterator();
   while (it1.hasNext())
   {
      Student s=it1.next();
   System.out.println(s);//从打印结果来这两句调用了toString,但是具体是怎么回事还是不太了解,
                                          //还有没有其他的方法

   }
}
}


作者: 李伟    时间: 2012-7-17 06:29
  Iterator<String> it=hm.keySet().iterator();//这句是不是就调用了keyset方法了?
//是的,keySet方法返回的是一个集合对象,然后用这个集合对象来获取集合的迭代器对象
System.out.println(s);//从打印结果来这两句调用了toString,但是具体是怎么回事还是不太了解,
                                          //还有没有其他的方法
//输出语句是自动调用toString方法的,toString方法是基类Object的方法,如果对toString方法重写,输出语句调用的就是重写后的toString方法。
作者: 程潇    时间: 2012-7-17 07:17
这个例子主要是考察Map中keySet()的应用
1.Map集合中存入的是键值对,一对一对往里存,而且要保证键的唯一性
2.keySet():将Map中所有的键存入到Set集合。因为Set具备迭代器,所以可以迭代方式获取所有的键,再根据get方法获取每一个键对应的值

理解了以上两点再来看题目:
1.Iterator<String> it=hm.keySet().iterator();//这句是不是就调用了keyset方法了?
这句不止调用了keyset方法,还调用了iterator方法获取Set的迭代器。整句话也可以写成下面两句:
Set<String> keySet = hm.keySet();
Iterator<String> it = keySet.iterator();

2.System.out.println(s);//从打印结果来这两句调用了toString,但是具体是怎么回事还是不太了解,
                                          //还有没有其他的方法
这句的作用就是调用toString方法.
如果s是基本数据类型,直接打印s的值就可以了。
如果s是对象,这句话就相当于System.out.println(s.toString());由于s是Student类,我们回到类中发现此类重写了toString()方法,返回的是id+"..."+name。那么这里就会调用Student中的toString()方法,打印的自然就是每个学生的id和名字了。如果Student中没有重写toString()方法,默认就会调用java.lang.Object的toString()方法(如下)
java.lang.Object的toString()方法体:
public String toString() {
        return getClass().getName() + "@" + Integer.toHexString(hashCode());
    }






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2