先上例子對象
Map<String, Object> map = new HashMap<String, Object>();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
map.put("key4", "value4");
Set<String> set = map.keySet();
Iterator<String> iterator = set.iterator();
while(iterator.hasNext()) {
String key = iterator.next();
System.out.println(key);
System.out.println(map.get(key));
}
Set<Entry<String, Object>> set1 = map.entrySet();
for(Entry<String, Object> entry : set1) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}get
二者最主要的區別在於:keySet()只能得到key,須要得到值的時候須要map.get(key),其源碼最終也是轉爲Entry進行獲取key的值.源碼
故entrySet省略了獲取value的單獨操做.it
keySet() 會生成KeyIterator迭代器,其next方法只返回其key值 :class
private class KeyIterator extends HashIterator<K> {
public K next() {
return nextEntry().getKey();
}
}map
entrySet() 會生成EntryIterator 迭代器,其next方法返回一個Entry對象的一個實例,其中包含key和value :迭代器
private class EntryIterator extends HashIterator<Map.Entry<K,V>> {
public Map.Entry<K,V> next() {
return nextEntry();
}
}方法