TreeMap源码分析七
2014-01-15 15:31
417 查看
转自:http://www.fengfly.com/plus/view-213898-8.html
获取所有键值对集合
entrySet() 返回“键值对集合”。顾名思义,它返回的是一个集合,集合的元素是“键值对”。
下面,我们看看它是如何实现的?entrySet() 的实现代码如下:
说明:entrySet()返回的是一个EntrySet对象。
下面我们看看EntrySet的代码:
说明:
EntrySet是“TreeMap的所有键值对组成的集合”,而且它单位是单个“键值对”。
EntrySet是一个集合,它继承于AbstractSet。而AbstractSet实现了除size() 和 iterator() 之外的其它函数,因此,我们重点了解一下EntrySet的size() 和 iterator() 函数
size() 的实现非常简单,AbstractSet集合中元素的个数=该TreeMap的元素个数。
iterator() 则返回一个迭代器,用于遍历AbstractSet。从上面的源码中,我们可以发现iterator() 是通过EntryIterator实现的;下面我们看看EntryIterator的源码:
说明:和Values类一样,EntryIterator也继承于PrivateEntryIterator类。
获取所有键值对集合
entrySet() 返回“键值对集合”。顾名思义,它返回的是一个集合,集合的元素是“键值对”。
下面,我们看看它是如何实现的?entrySet() 的实现代码如下:
public Set<Map.Entry<K,V>> entrySet() { EntrySet es = entrySet; return (es != null) ? es : (entrySet = new EntrySet()); }
说明:entrySet()返回的是一个EntrySet对象。
下面我们看看EntrySet的代码:
// EntrySet是“TreeMap的所有键值对组成的集合”, // EntrySet集合的单位是单个“键值对”。 class EntrySet extends AbstractSet<Map.Entry<K,V>> { public Iterator<Map.Entry<K,V>> iterator() { return new EntryIterator(getFirstEntry()); } // EntrySet中是否包含“键值对Object” public boolean contains(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry<K,V> entry = (Map.Entry<K,V>) o; V value = entry.getValue(); Entry<K,V> p = getEntry(entry.getKey()); return p != null && valEquals(p.getValue(), value); } // 删除EntrySet中的“键值对Object” public boolean remove(Object o) { if (!(o instanceof Map.Entry)) return false; Map.Entry<K,V> entry = (Map.Entry<K,V>) o; V value = entry.getValue(); Entry<K,V> p = getEntry(entry.getKey()); if (p != null && valEquals(p.getValue(), value)) { deleteEntry(p); return true; } return false; } // 返回EntrySet中元素个数 public int size() { return TreeMap.this.size(); } // 清空EntrySet public void clear() { TreeMap.this.clear(); } }
说明:
EntrySet是“TreeMap的所有键值对组成的集合”,而且它单位是单个“键值对”。
EntrySet是一个集合,它继承于AbstractSet。而AbstractSet实现了除size() 和 iterator() 之外的其它函数,因此,我们重点了解一下EntrySet的size() 和 iterator() 函数
size() 的实现非常简单,AbstractSet集合中元素的个数=该TreeMap的元素个数。
iterator() 则返回一个迭代器,用于遍历AbstractSet。从上面的源码中,我们可以发现iterator() 是通过EntryIterator实现的;下面我们看看EntryIterator的源码:
final class EntryIterator extends PrivateEntryIterator<Map.Entry<K,V>> { EntryIterator(Entry<K,V> first) { super(first); } public Map.Entry<K,V> next() { return nextEntry(); } }
说明:和Values类一样,EntryIterator也继承于PrivateEntryIterator类。
相关文章推荐
- Java集合框架之Map--TreeMap源码分析
- 源码分析-TreeMap
- TreeMap源码分析二
- TreeMap源码分析——深入分析(基于JDK1.6)
- TreeMap源码分析
- TreeMap源码分析——基础分析(基于JDK1.6)
- TreeMap put(K key,V value)源码分析
- Java-TreeMap源码分析及示例
- java集合框架10——TreeMap和源码分析(一)
- 基础数据结构之TreeMap源码分析
- 深入源码分析TreeSet和TreeMap
- java核心基础--jdk源码分析学习--TreeMap
- Java集合(11)--TreeMap源码分析
- HashMap、HashTable、TreeMap 深入分析及源码解析
- 【集合框架】JDK1.8源码分析之TreeMap(五)
- TreeMap源码分析三
- TreeMap源码分析
- Java集合之TreeMap源码分析
- TreeMap源码分析
- TreeSet与TreeMap的源码分析 JDK7