基于HashSet的HashMap的简单实现

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;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值