今天刚刚看了接口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集合,
*究竟怎么样才能正确的访问
*/
至于set的大小为3是因为set也是一个一个键对应一个值,因此其大小跟map的大小一样
得到的set每个元素都是一个Map.Entry,每个都包含键和值.
Map增加数据是用add()方法吗?应该是put()吧...要显示的话不用加上(String)
System.out.println(i.next());
改成下面这样就可以:
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了,编译一下看能否通过