基于HashSet的HashMap的简单实现

来源:互联网 发布:java demo是什么 编辑:程序博客网 时间:2024/06/18 08:29
package cn.yimeng.util;import java.io.Serializable;import java.util.HashSet;import java.util.Iterator;import java.util.Map;/** *  HashMap简单实现 基于hashSet * * @author yimeng * @version 1.0 */public class Set2Map<K, V> extends HashSet<SimpleEntry<K, V>> {    public void clear() {        super.clear();    }    public boolean containsKey(K key) {        return super.contains(new SimpleEntry<K, V>(key, null));    }    public boolean containsValue(Object value) {        for (SimpleEntry<K, V> se : this) {            if (se.getValue() == value) {                return true;            }        }        return false;    }    public V get(Object key) {        for (SimpleEntry<K, V> se : this) {            if (se.getKey().equals(key)) {                return se.getValue();            }        }        return null;    }    public V put(K key, V value) {        super.add(new SimpleEntry<>(key, value));        return value;    }    public void putAll(Map<? extends K, ? extends V> map) {        for (K key : map.keySet()) {            super.add(new SimpleEntry<>(key, map.get(key)));        }    }    public V removeEntry(K key) {        for (Iterator<SimpleEntry<K, V>> it = this.iterator(); it.hasNext(); ) {            SimpleEntry<K, V> next = it.next();            if (next.getKey().equals(key)) {                V value = next.getValue();                it.remove();                return value;            }        }        return null;    }    public int size() {        return super.size();    }}class SimpleEntry<K, V> implements Map.Entry<K, V>, Serializable {    private final K key;    private V value;    public SimpleEntry(K key, V value) {        this.key = key;        this.value = value;    }    public SimpleEntry(Map.Entry<? extends K, ? extends V> entry) {        this.key = entry.getKey();        this.value = entry.getValue();    }    @Override    public K getKey() {        return key;    }    @Override    public V getValue() {        return value;    }    @Override    public V setValue(V value) {        V oldValue = this.value;        this.value = value;        return oldValue;    }    @Override    public boolean equals(Object o) {        if (this == o) {            return true;        }        if (o.getClass() == SimpleEntry.class) {            SimpleEntry se = (SimpleEntry) o;            return getKey().equals(se.getKey());        }        return false;    }    @Override    public int hashCode() {        return key == null ? 0 : key.hashCode();    }    @Override    public String toString() {        return key + "=" + value;    }}
原创粉丝点击