public abstract class AbstractMap<K,V> implements Map<K,V>
这个抽象类实现了Map接口。
protected AbstractMap() {
}
无参数构造方法。
public int size() {
return entrySet().size();
}
public abstract Set<Entry<K,V>> entrySet();
这个是size方法返回map的长度,调用的是下面的entrySet抽象方法返回键集合的长度。
public boolean isEmpty() {
return size() == 0;
}
这个方法是判断集合是否为空的方法,返回的是size方法是否为零的判断。
public boolean containsValue(Object value) {
Iterator<Entry<K,V>> i = entrySet().iterator();
if (value==null) {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (e.getValue()==null)
return true;
}
} else {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (value.equals(e.getValue()))
return true;
}
}
return false;
}
这个方法是判断map中是否包含值的方法。
首先获取键的迭代器。
然后判断如果参数为空的话,就用迭代器迭代键值对集合,然后判断值是否为空如果有空值,就返回true。
如果参数不为空,仍然用迭代器迭代键值对集合,然后判断值是否和参数equals,如果有就返回true。
如果循环结束后,方法仍未返回,就返回false。
public boolean containsKey(Object key) {
Iterator<Map.Entry<K,V>> i = entrySet().iterator();
if (key==null) {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (e.getKey()==null)
return true;
}
} else {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (key.equals(e.getKey()))
return true;
}
}
return false;
}
这个方法是判断map具备某个键的方法。
和上面的类似,就是遍历的时候是判断的是键。
public V get(Object key) {
Iterator<Entry<K,V>> i = entrySet().iterator();
if (key==null) {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (e.getKey()==null)
return e.getValue();
}
} else {
while (i.hasNext()) {
Entry<K,V> e = i.next();
if (key.equals(e.getKey()))
return e.getValue();
}
}
return null;
}
这个是get方法,根据键获取值的方法。
和上面很类似,先获取键值对迭代器,然后判断参数是否为空,如果为空,就遍历获取各个键值对,判断哪个键为空就返回该空键对应的值。
如果参数不为空,就遍历获取各个键值对,判断哪个键和参数equals,然后获取该键对应的值。
如果遍历玩仍然没有返回值,就返回空。
public V put(K key, V value) {
throw new UnsupportedOperationException();
}
这个是put方法,这个类没有实现,留给子类实现。