共同学习Java源代码-数据结构-AbstractMap抽象类(一)

来源:互联网 发布:java实现base64解码 编辑:程序博客网 时间:2024/06/05 07:08

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方法,这个类没有实现,留给子类实现。

0 0
原创粉丝点击