慕容大雪花
public Set keySet() { if (keySet == null) { // 创建一个 Set 实例因为 AbstractSet 是一个抽象类,所以需要实现抽象方法,并且Java编译的时候会生成一个匿名类 keySet = new AbstractSet() { // iterator 接口在 java 中for each 会调用该方法 public Iterator iterator() { // 创建 Iterator 实例因为 Iterator 是一个接口同时这里也会生成一个匿名类 return new Iterator() { // entrySet() 是 AbstractMap 中定义的一个抽象方法该方法由子类实现 // public abstract Set> entrySet(); private Iterator> i = entrySet().iterator(); public boolean hasNext() { return i.hasNext(); } public K next() { // 返回 Map.Entry 的 key 值,因为是 keySet() return i.next().getKey(); } public void remove() { i.remove(); } }; } public int size() { return AbstractMap.this.size(); } public boolean isEmpty() { return AbstractMap.this.isEmpty(); } public void clear() { AbstractMap.this.clear(); } public boolean contains(Object k) { return AbstractMap.this.containsKey(k); } }; } return keySet;}entrySet().iterator() 实现楼主可以看一下 HashMap 中的实现,其实就是一个数组加链表。楼主了解一下这2种数组结构应该就明白了。