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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© ぺsimon☆ 中级黑马   /  2013-4-26 12:05  /  6017 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 ぺsimon☆ 于 2013-4-28 17:41 编辑
  1. /**
  2. 利用keySet方法来取出Map集合中对应的键和值
  3. */

  4. import java.util.*;
  5. class MapDemo2  //定义一个类
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.         //定义一个HahsMap集合
  10.         Map<String,String> map=new HashMap<String,String>();
  11.         //向HashMap集合添加元素
  12.         map.put("01","wangwu01");
  13.         map.put("02","wangwu02");
  14.         map.put("03","wangwu03");
  15.         map.put("04","wangwu04");
  16.         map.put("05","wangwu05");
  17.         //取得所有键,问题在这里:老师说这里取得的所有键都是Set集合,但是Set集合不是一个接口吗,没有覆盖,怎么可以使用iterator()方法呢?
  18.         Set<String> s=map.keySet();
  19.         //取得迭代器
  20.         Iterator<String> it=s.iterator();
  21.         //通过循环获取键值对
  22.         while(it.hasNext())
  23.         {
  24.         String s1=it.next();
  25.         String s2=map.get(s1);
  26.         System.out.println(s1+"="+s2);
  27.         }
  28.         }
  29. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

6 个回复

正序浏览
黄玉昆 黑马帝 2013-4-27 20:10:59
7#
如果仍有问题,请继续追问,如果问题已解决,请将分类改为已解决,谢谢
回复 使用道具 举报
本帖最后由 易贺男 于 2013-4-26 13:15 编辑

1、通过keySet()方法取出的是Map的键,这个方法返回的是一个Set集合:意思就是将所有的键存储到这个Set集合中去,这样就可以通过迭代器取出所有的键
2、Iterator是个接口,它是Collection接口的内部接口,把它放在了成员的位置上,这样Collection的子类都会有实现这个接口的子类,有符合自己特点的取出方式
Set集合是Collection的子类所以Set集合内部也有相应的迭代器。因为只是调用取出方法所以可以是用多态,父类引用指向子类对象,所以就可以用iterator来调用Set集合里的
迭代器

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 陈雨 于 2013-4-26 12:59 编辑

其实很简单,你这样理解就没问题了,keySet()方法是将Map集合中的所有键取出并返回Set集合子类对象,Set<String> s=map.keySet()这句话理解没问题了吧。
为什么要用这样的方法呢?
视频里也讲过,因为通过get()方法,只能获取单一键对应的值,你要获取所有键怎么办?这时就出现了keySet()方法,它是将所有键取出并放入Set集合中,再加上Map集合无法直接用迭代器取出(应该是Collection集合的取出方法,集合本身就是储存对象的容器,怎么选择取决于数据结构不同,和你自己想怎么操作,而选择对应的容器)所以存放于Set集合中便于取出,(Set集合是可以用迭代器的)。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
楼主要清楚面向接口编程的含义。Set<String> s=map.keySet(); 要是这样写HashSet<String>s=map.KeySet();不就是用子类去实现了吗,HashSet就是Set的实现类。但是直接用Set<String> s=map.keySet()就是实现类对象指向接口的引用。Collection接口中的iterator方法能够迭代集合,但是怎么迭代,它自己是不清楚的,所以必须依赖于自己的实现类,不同的实现类迭代的方式都不相同,所以迭代器对象是在具体容器中进行的内部实现,对于使用容器者而言,具体的实现并不重要,只要通过获取到该实现的迭代器对象即可,也就是iterator方法。Iterator接口是对所有的Collection容器进行元素取出的公共接口。

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

回复 使用道具 举报
你能理解 Object obj = new String("4544");
如果你能理解这句话
那么这句话你也能理解
Set<String> s=map.keySet();
回复 使用道具 举报
keySet();方法返回的是set集合的一个子类对象,这是多态!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马