关于JAVA中的HashMap 和iterator的问题

importjava.util.HashSet;importjava.util.HashMap;importjava.util.Iterator;publicclassT... import java.util.HashSet;
import java.util.HashMap;
import java.util.Iterator;
public class Test{

public static void main(String[] args) {
HashMap<String, String> phoneBook = new HashMap<String, String>();

phoneBook.put("Charles Nguyen", "(531)9392 4587");
phoneBook.put("Lisa Jones", "(402)4536 4674");
phoneBook.put("Lisa Jones", "(402)4536 4675");
phoneBook.put("William H. Smith", "(998)5488 0123");
System.out.println(phoneBook.get("Lisa Jones"));
System.out.println(phoneBook.size());
Iterator<String> it = phoneBook.keySet().iterator();
while(it.hasNext())
{
String key = it.next();
System.out.println(key);
System.out.println(phoneBook.get(key));
}
}
}
上述代码中的Iterator<String> it = phoneBook.keySet().iterator();这一句我看不懂啊,疑问又几个!
第一:iterator怎么会有这种用法啊?这是不是代表着HashMap中的key值全都放到名叫it的iterator类型的迭代器中了?
第二:keyset()不用定义就可以直接使用啊?
第三:我将代码修改成:HashSet<String> it = phoneBook.keySet().HashSet();就是错误啊?
请高手详细解答,加分大大的有 !!!
key 和keyset不用定义就直接能用啊?书上没讲啊!!!
展开
 我来答
Oo海之蓝歌oO
2011-09-19 · 喜欢计算机有关的东东
Oo海之蓝歌oO
采纳数:244 获赞数:876

向TA提问 私信TA
展开全部
1、phoneBook.keySet();该方法可以得到一个Set集合,既然是Set集合,那么就可以使用Collection接口的iterator()方法得到该集合的迭代器。
2、定义什么???keyset()方法属于Map接口的方法定义,HashMap肯定实现了的。这里只是匿名使用了一下。就像:
Date date = new Date();
date.getTime();
和new Date().getTime();
是一样的。
3、 phoneBook.keySet().HashSet();?这是什么意思??
phoneBook.keySet()得到的是Set,Set接口有HashSet()方法吗????
hellodajun
2011-09-19 · 超过20用户采纳过TA的回答
知道答主
回答量:80
采纳率:0%
帮助的人:51.6万
展开全部
第一:Iterator<String> it = phoneBook.keySet().iterator();这句不是Iterator的用法,你看看api,踏实Set的用法,意思是将key-value中的key迭代
第二:phoneBook是HashMap,api中有keySet(),得到的是Set,而Set中有iterator()方法
第三:phoneBook是HashMap,api中有keySet(),得到的是Set,Set中根本没有HashSet()这个方法
书上有些东西不是全部的,你最好看看api
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友c6b5443
2011-09-20
知道答主
回答量:4
采纳率:0%
帮助的人:3.4万
展开全部
keySet
public Set<K> keySet()返回此映射中所包含的键的 Set 视图。该 set 受映射的支持,所以对映射的更改将反映在该 set 中,反之亦然。如果在对 set 进行迭代的同时修改了映射(通过迭代器自己的 remove 操作除外),则迭代结果是不确定的。该 set 支持元素的移除,通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作可从该映射中移除相应的映射关系。它不支持 add 或 addAll 操作。
指定者:
接口 Map<K,V> 中的 keySet
覆盖:
类 AbstractMap<K,V> 中的 keySet
返回:
此映射中包含的键的 set 视图

iterator
Iterator<E> iterator()返回在此 set 中的元素上进行迭代的迭代器。返回的元素没有特定的顺序(除非此 set 是某个提供顺序保证的类的实例)。
指定者:
接口 Collection<E> 中的 iterator
指定者:
接口 Iterable<E> 中的 iterator
返回:
在此 set 中的元素上进行迭代的迭代器
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友0a0f00f3c2
2011-09-19 · 超过27用户采纳过TA的回答
知道答主
回答量:124
采纳率:0%
帮助的人:57.6万
展开全部
你应该好好查找jdk文档学习。
第一个问题:public interface Iterator<E>对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同: 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
第二个问题:其实跟第一个问题相关:你看啊,你的phoneBook是哟个hashmap类型,hashmap类型就可以调用hashMap的方法,所以就有了phoneBook.keySet(),而这个方法返回了一个set<>类型,set类型的当然可以进行lterator了;
第三个问题就是因为你还不定方法的调用返回值问题;
用jdk好好查询一下,就知道了~~~~~~~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wen123103624
2011-09-19 · TA获得超过105个赞
知道答主
回答量:144
采纳率:0%
帮助的人:74.6万
展开全部
Hashmap 里面的对象是通过key访问的,每个key对应一个对象,key不重复
Iterator 迭代器,只能从头开始按顺序访问集合里面的元素
Set 无重复的集合。当把对象放入集合中时,会调用对象的equals方法,比较,如果集合里有就不放,没有再放
建议你看一下这个文章http://blog.csdn.net/xjtuse_mal/article/details/6578497
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式