关于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不用定义就直接能用啊?书上没讲啊!!! 展开
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不用定义就直接能用啊?书上没讲啊!!! 展开
9个回答
展开全部
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()方法吗????
2、定义什么???keyset()方法属于Map接口的方法定义,HashMap肯定实现了的。这里只是匿名使用了一下。就像:
Date date = new Date();
date.getTime();
和new Date().getTime();
是一样的。
3、 phoneBook.keySet().HashSet();?这是什么意思??
phoneBook.keySet()得到的是Set,Set接口有HashSet()方法吗????
展开全部
第一: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
第二:phoneBook是HashMap,api中有keySet(),得到的是Set,而Set中有iterator()方法
第三:phoneBook是HashMap,api中有keySet(),得到的是Set,Set中根本没有HashSet()这个方法
书上有些东西不是全部的,你最好看看api
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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 中的元素上进行迭代的迭代器
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 中的元素上进行迭代的迭代器
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你应该好好查找jdk文档学习。
第一个问题:public interface Iterator<E>对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同: 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
第二个问题:其实跟第一个问题相关:你看啊,你的phoneBook是哟个hashmap类型,hashmap类型就可以调用hashMap的方法,所以就有了phoneBook.keySet(),而这个方法返回了一个set<>类型,set类型的当然可以进行lterator了;
第三个问题就是因为你还不定方法的调用返回值问题;
用jdk好好查询一下,就知道了~~~~~~~~
第一个问题:public interface Iterator<E>对 collection 进行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration。迭代器与枚举有两点不同: 迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。
第二个问题:其实跟第一个问题相关:你看啊,你的phoneBook是哟个hashmap类型,hashmap类型就可以调用hashMap的方法,所以就有了phoneBook.keySet(),而这个方法返回了一个set<>类型,set类型的当然可以进行lterator了;
第三个问题就是因为你还不定方法的调用返回值问题;
用jdk好好查询一下,就知道了~~~~~~~~
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Hashmap 里面的对象是通过key访问的,每个key对应一个对象,key不重复
Iterator 迭代器,只能从头开始按顺序访问集合里面的元素
Set 无重复的集合。当把对象放入集合中时,会调用对象的equals方法,比较,如果集合里有就不放,没有再放
建议你看一下这个文章http://blog.csdn.net/xjtuse_mal/article/details/6578497
Iterator 迭代器,只能从头开始按顺序访问集合里面的元素
Set 无重复的集合。当把对象放入集合中时,会调用对象的equals方法,比较,如果集合里有就不放,没有再放
建议你看一下这个文章http://blog.csdn.net/xjtuse_mal/article/details/6578497
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询