黑马程序员技术交流社区
标题:
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