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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 沈佳龙 中级黑马   /  2012-10-12 11:24  /  1440 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 沈佳龙 于 2012-10-12 17:19 编辑

Map为什么不能直接实现迭代,要迭代应该怎么办??

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

4 个回复

倒序浏览
自己查下API吧    可以实现通过对键的迭代来间接的迭代Map
回复 使用道具 举报
Map没有实现Iterator接口
要实现迭代就需要把它转换成Set集合,然后迭代
  1. Map<String,String> map = new HashMap<String,String>();
  2.                 map.put("02", "zhangsan2");
  3.                 map.put("03", "zhangsan3");
  4.                 map.put("01", "zhangsan1");
  5.                 map.put("04", "zhangsan4");
  6.                
  7.                 Set<Map.Entry<String,String>> entrySet = map.entrySet();
  8.                
  9.                 Iterator<Map.Entry<String,String>> it = entrySet.iterator();
  10.                
  11.                 while(it.hasNext())
  12.                 {
  13.                         Map.Entry<String,String> me = it.next();
  14.                         String key = me.getKey();
  15.                         String value = me.getValue();
  16.                         System.out.println("key:"+key+"  value:"+value);
  17.                        
  18.                 }
复制代码
map迭代就是这么玩的

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 赞一个!

查看全部评分

回复 使用道具 举报
迭代需要获取迭代器iterator(),那么这个类就需要实现Iterator接口。而Map集合没有实现这个接口。如果Map想要实现迭代可以用它的两个方法entrySet() 和keySet(),它们返回的都是Set集合。例如:
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
class  MapTest{
      public static void main(String[] args) {
            HashMap<String,Integer> hm = new HashMap<String,Integer>();
            hm.put("lisi1",21);
            hm.put("zhangshan ",22);
            //第一种取出方式 keySet
           Set<String> keySet = hm.keySet();
           //获取迭代器
            Iterator<String> it = keySet.iterator();
           //取出数据
           while(it.hasNext()){
                  String str = it.next();
                  int name = hm.get(str);
                  System.out.println(str+".."+name);
           }
            System.out.println("--------------第二种方法取出");
            //第二种取出方式 entrySet
             Set<Map.Entry<String,Integer>> entrySet = hm.entrySet();
             //获取迭代器
              Iterator<Map.Entry<String,Integer>> iter = entrySet.iterator();
              //获取数据
             while(iter.hasNext()){
                    Map.Entry<String,Integer> me = iter.next();
                    String str = me.getKey();
                    int name = me.getValue();
                    System.out.println(str+".."+name);
             }
       }
}

评分

参与人数 1技术分 +1 收起 理由
韩军博 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
  1. public class Test {

  2. public static void main(String[] aa) {
  3.   Map map = new HashMap();
  4.   map.put("a", 1);
  5.   map.put("b", 2);
  6.   map.put("c", 3);
  7.   map.put("d", 4);
  8.   map.put("e", 5);
  9.   Set set = map.entrySet();
  10.   Iterator it = set.iterator();
  11.   while (it.hasNext()) {
  12.    System.out.println(it.next());
  13.   }
  14. }
复制代码
Collection实现了Iterator接口,Map没有实现
如果你想的话,其实Map也可以自己写一个。
  1.   public interface Iterator {
  2.   boolean hasNext();
  3.   Object next();
  4.   void remove();
  5.   }

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