黑马程序员技术交流社区

标题: Map集合为什么不能用增强for循环来迭代? [打印本页]

作者: 韩军博    时间: 2011-12-10 10:09
标题: Map集合为什么不能用增强for循环来迭代?
本帖最后由 韩军博 于 2011-12-10 23:34 编辑

请给位详细的解释
作者: 小春同学    时间: 2011-12-10 10:33
本帖最后由 熊明春 于 2011-12-10 10:36 编辑

Map集合用增强for循环来迭代是可以的,例:
有集合Map<Students,String> hs = new HashMap();     //其它添加键和值的put()代码就不写了
取出方式可以有:
  for(Object key : hs.keySet()){
          System.out.print(key+"--->");
          System.out.println(hs.get(key));
   }
作者: 侯伟浩    时间: 2011-12-10 11:54
怎么不能,就是方式不同,例子
  1. public void method()
  2.         {
  3.                 Map<String,String> map=new TreeMap<String,String>();
  4.                 map.put("123", "JIm");
  5.                 map.put("456", "DOm");
  6.                 for(Map.Entry<String, String> me:map.entrySet())
  7.                 {
  8.                         System.out.println(me.getKey()+"----"+me.getValue());
  9.                 }
  10.         }
复制代码

作者: 李明    时间: 2011-12-10 13:32
应该是可以的啊,可以用entrySet()取得所有的键值关系,存入Set集合中,就可以用增强for循环迭代了,用getKey()取键,用getValue()取值。
作者: 王冀    时间: 2011-12-10 23:02
本帖最后由 王冀 于 2011-12-10 23:05 编辑

从java的实现机制来说,能够迭代的类必须实现Iterable接口,而Map没有继承该接口,因此不能迭代。

个人认为对它直接迭代也不易进行处理。因为你不能确定Iterator的next方法返回的类型是什么。因此需要内部方法entrySet进行处理,将其中的每一个二元组转化为一个Map.Entry<,>对象才能处理。
作者: 我心飞翔    时间: 2011-12-10 23:11
今天主要讲了java技术中的jdk5.0中的一些增强特性包括反射、

枚举、for循环的增强以及内省技术。在这里必须使用jdk5.o版

本的编译器。
1。专业的测试工具junit。junit中的方法执行过程是void

setUpBeforeClass()首先执行且执行一次,然后是void setUp()

方法,在下面是测试程序,然后执行void tearDown(),最后执

行void tearDownAfterClass()方法。
2.静态导入
3。自动装箱与拆箱技术;将基本的数据类型封装到一个对象中

的过程成为装箱,反之则称为拆箱。一共有八种类的包装器

Integer Byte Short Long Float Double Character Boolean.
所有的类包装器中的数据都是常量无法改变。5.0版本引入了自

动装箱与拆箱技术大大减轻了程序员的编码繁琐程度。
4 增强的for循环 for循环只能用在数组和实现了iterator接口

的集合类上。语法格式for(变量类型 变量:需要迭代的数组或

集合){}
map集合并没有实现iterator接口因此不能用增强的for循环。
但map由一个map.entrySet()方法返回set集合因此可以使用增强

的for循环。
5可变参数 Arrays.asList方法返回List集合。如果方法接收的

是可变参数那么传递进去的可以是数组也可以是多个值。可变参

数只能处于参数列表的最后, 所以一个方法最多只能有一个长度

可变的参数
6枚举类
枚举类的构造函数为私有的。
枚举类可以实现接口或继承抽象类
7反射技术 反射就是把Java类中的各种成分映射成一个个的

java对象。例如,一个类有:成员变量,方法,构造方法,包等

等信息,利用反射技术可以对一个类进行解剖,把各个组成部分

映射成一个个对象。
8内省Apache组织开发了一套用于操作JavaBean的API,这套API

考虑到了很多实际开发中的应用场景,因此在实际开发中很多程

序员使用这套API操作JavaBean,以简化程序代码的编写。

Beanutils工具包的常用类:
BeanUtils
PropertyUtils
ConvertUtils.regsiter(Converter convert, Class clazz)

看同事的来给你答案




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