1、基本概述
Set<Map.Entry<K,V>> entrySet() 返回此映射中包含的映射关系的 set 视图。
Set<K> keySet() 返回此映射中包含的键的 set 视图。
KeySet是键集合,Set里面的类型即Key的类型
EntrySet是 键-值 对的集合,Set里面的类型是Map.Entry
2、效率分析
对于keySet其实是遍历了2次,一次是转为iterator,一次就从hashMap中取出key所对于的value。而entryset只是遍历了第一次,他把key和value都放到了entry中,所以就快了。
3、使用举例
foreach的内部原理其实还是 Iterator,但它不能像Iterator一样可以人为的控制,而且也不能调用iterator.remove(),
更不能使用下标来方便的访问元素。因此foreach这种循环一般只适合做数组的遍历,提取数据显示等,不适合用于增加删除和使用下标等复杂的操作。
/**
* jdk1.5支持,用keySet()和For-Each循环
*/
Map<String,String> valueMap =newHashMap<String,String>();
for(String valName:valueMap.keySet()){
String key =valName;
Object value =valueMap.get(valName);
}
/**
* jdk1.5支持,用entrySet()和For-Each循环()
*/
Set<Map.Entry<String, String>> keyEntrySet= valueMap.entrySet();
for(Map.Entry<String, String> entry:keyEntrySet){
String key = entry.getKey();
Object value = entry.getValue();
}
/**
* entrySet--Iterator
*/
Map<String,String> questionsMap=newHashMap<String,String>();
Iterator<Entry<String,String>> questions =questionsMap.entrySet().iterator();
while (questions.hasNext()) {
Entry<String, String> question =questions.next();
question.getValue();
question.getKey();
}
/**
* keySet--Iterator
*/
Map<String, String> maps =new HashMap<String,String>();
Iterator<String> it =maps.keySet().iterator();
while (it.hasNext()){
String key = it.next();
String value= maps.get(key);
}