今天刚刚看了接口map 它的一些用法让我实在 不得其解。。
   Map 接口是持有 key-value pair 的接口,但是要想用迭代器访问它,还要通过中间的转换,就是间接使用迭代器 ,,
   Map 借口的实现类 HashMap 中有一个方法 就是 entrySet() 它返回一个Set的实现类对象,列如:
    
    Map map = new HashMap();
    //插入三个元素;
    map.add("a","apple");
    map.add("b","banana");
    map.add("c","cherry");
    //让map返回一个Set实现类的对象 给 set;
    Set set = map.entrySet();
    set.size();//set.size()的结果是3;
/**
*问题一    
   * 请问下 ,为什么我用set.entrySet返回的Set的实现类对象,set中只有三个元素,,
   * map 中是三个毽子对,按说返回到set中因该是6个对象,set.size()为什么不是6;
   * 厉害的能不能帮我把它们的数据结构也给我分析下,,谢谢 !!
*/   Iterator i = set.iterator();
   System.out.println((String)i.next()); //回报错/**
*问题二
   *为什么我现在不能直接用迭代器去访问这个set集合,
   *究竟怎么样才能正确的访问
*/  

解决方案 »

  1.   

    首先纠正一下楼主:map中添加元素的方法不是add,而是put;
    至于set的大小为3是因为set也是一个一个键对应一个值,因此其大小跟map的大小一样
      

  2.   

    Set set = map.entrySet();
    得到的set每个元素都是一个Map.Entry,每个都包含键和值.
    Map增加数据是用add()方法吗?应该是put()吧...要显示的话不用加上(String)
    System.out.println(i.next()); 
      

  3.   

    错了,不好意思,set并不是一个键对应一个值
      

  4.   

    map有2个方法是将map中的元素放入set中,一个是keySet(),是将map中的键放入set,而另一个方法entrySet()是将map中的值放入set,所以这里的大小只有3
      

  5.   

    entrySet只返回键的值,MAP的原理是根据键找值,还有i.next()不用强制转型
      

  6.   

    entrySet()方法返回的是包含Map类的一个内部类Map.Entry的对象的Set集合,Map.Entry对象包含了Map中的一个键跟一个值,用它的getKey()和getValue()方法就可以获得健和值.
    改成下面这样就可以:
    Map map = new HashMap();
    //插入三个元素;是put不是add
    map.put("a","apple");
    map.put("b","banana");
    map.put("c","cherry");
    //让map返回一个Set实现类的对象 给 Set类型的引用,这个对象里面有3个Map.Entry对象;
    Set set = map.entrySet();
    set.size();//set.size()的结果是3;
    Iterator i = set.iterator();
    //System.out.println((String)i.next()); 
    //因为这个迭带器中的对象是Map.Entry类型不能转为String,所以出错
    while(i.hasNext()){
       Map.Entry entry=(Map.Entry)i.next();
       String key=i.getKey();
       String value=i.getValue();
       System.out.println(key+"="+value);
    }时间长了,也不知道上面写的对不对,懒得去翻JDK了,编译一下看能否通过