黑马程序员技术交流社区
标题:
HashMap集合取键值对的问题
[打印本页]
作者:
ぺsimon☆
时间:
2013-4-26 12:05
标题:
HashMap集合取键值对的问题
本帖最后由 ぺsimon☆ 于 2013-4-28 17:41 编辑
/**
利用keySet方法来取出Map集合中对应的键和值
*/
import java.util.*;
class MapDemo2 //定义一个类
{
public static void main(String[] args)
{
//定义一个HahsMap集合
Map<String,String> map=new HashMap<String,String>();
//向HashMap集合添加元素
map.put("01","wangwu01");
map.put("02","wangwu02");
map.put("03","wangwu03");
map.put("04","wangwu04");
map.put("05","wangwu05");
//取得所有键,问题在这里:老师说这里取得的所有键都是Set集合,但是Set集合不是一个接口吗,没有覆盖,怎么可以使用iterator()方法呢?
Set<String> s=map.keySet();
//取得迭代器
Iterator<String> it=s.iterator();
//通过循环获取键值对
while(it.hasNext())
{
String s1=it.next();
String s2=map.get(s1);
System.out.println(s1+"="+s2);
}
}
}
复制代码
作者:
孙浩
时间:
2013-4-26 12:25
keySet();方法返回的是set集合的一个子类对象,这是多态!
作者:
刘胜寒
时间:
2013-4-26 12:27
你能理解 Object obj = new String("4544");
如果你能理解这句话
那么这句话你也能理解
Set<String> s=map.keySet();
作者:
谭威
时间:
2013-4-26 12:32
楼主要清楚面向接口编程的含义。Set<String> s=map.keySet(); 要是这样写HashSet<String>s=map.KeySet();不就是用子类去实现了吗,HashSet就是Set的实现类。但是直接用Set<String> s=map.keySet()就是实现类对象指向接口的引用。Collection接口中的iterator方法能够迭代集合,但是怎么迭代,它自己是不清楚的,所以必须依赖于自己的实现类,不同的实现类迭代的方式都不相同,所以迭代器对象是在具体容器中进行的内部实现,对于使用容器者而言,具体的实现并不重要,只要通过获取到该实现的迭代器对象即可,也就是iterator方法。Iterator接口是对所有的Collection容器进行元素取出的公共接口。
作者:
陈雨
时间:
2013-4-26 12:36
本帖最后由 陈雨 于 2013-4-26 12:59 编辑
其实很简单,你这样理解就没问题了,keySet()方法是将Map集合中的所有键取出并返回Set集合子类对象,Set<String> s=map.keySet()这句话理解没问题了吧。
为什么要用这样的方法呢?
视频里也讲过,因为通过get()方法,只能获取单一键对应的值,你要获取所有键怎么办?这时就出现了keySet()方法,它是将所有键取出并放入Set集合中,再加上Map集合无法直接用迭代器取出(应该是Collection集合的取出方法,集合本身就是储存对象的容器,怎么选择取决于数据结构不同,和你自己想怎么操作,而选择对应的容器)所以存放于Set集合中便于取出,(Set集合是可以用迭代器的)。
作者:
yhnan
时间:
2013-4-26 13:02
本帖最后由 易贺男 于 2013-4-26 13:15 编辑
1、通过keySet()方法取出的是Map的键,这个方法返回的是一个Set集合:意思就是将所有的键存储到这个Set集合中去,这样就可以通过迭代器取出所有的键
2、Iterator是个接口,它是Collection接口的内部接口,把它放在了成员的位置上,这样Collection的子类都会有实现这个接口的子类,有符合自己特点的取出方式
Set集合是Collection的子类所以Set集合内部也有相应的迭代器。因为只是调用取出方法所以可以是用多态,父类引用指向子类对象,所以就可以用iterator来调用Set集合里的
迭代器
作者:
黄玉昆
时间:
2013-4-27 20:10
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2