A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹善波 中级黑马   /  2012-7-17 01:28  /  1637 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一个学校多个教室的例子
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,但是具体是怎么回事还是不太了解,
                                          //还有没有其他的方法

   }
}
}

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

2 个回复

倒序浏览
  Iterator<String> it=hm.keySet().iterator();//这句是不是就调用了keyset方法了?
//是的,keySet方法返回的是一个集合对象,然后用这个集合对象来获取集合的迭代器对象
System.out.println(s);//从打印结果来这两句调用了toString,但是具体是怎么回事还是不太了解,
                                          //还有没有其他的方法
//输出语句是自动调用toString方法的,toString方法是基类Object的方法,如果对toString方法重写,输出语句调用的就是重写后的toString方法。
回复 使用道具 举报
这个例子主要是考察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());
    }

评分

参与人数 1黑马币 +4 收起 理由
尹善波 + 4

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马