java自己实现map接口

map接口的实现首先要在实现类中实现一个entry类,用来保存键值对
SimpleMap类内部存储数据结构是List

public class SimpleMap<K,V> implements Map<K,V> {
	//静态的Entry类用来保存键值对
    static class SimpleEntry implements Entry,Comparable{
        Object key,value;

        public SimpleEntry(Object key) {
            this.key = key;
        }

        public SimpleEntry(Object key, Object value) {
            this.key = key;
            this.value = value;
        }

        @Override
        public int compareTo(Object o) {
            SimpleEntry simpleEntry = (SimpleEntry) o;
            return ((Comparable)key).compareTo(simpleEntry.key);
        }

        @Override
        public Object getKey() {
            return key;
        }

        @Override
        public Object getValue() {
            return value;
        }

        @Override
        public Object setValue(Object value) {
            this.value = value;
            return value;
        }

        @Override
        public String toString() {
            return "SimpleEntry{" +
                    "key=" + key +
                    ", value=" + value +
                    '}';
        }
    }
    //map的长度
    private int size = 0;
    //map的存储集合
    private static ArrayList<SimpleEntry> mapList = new ArrayList<>();


    @Override
    public int size() {
        return size;
    }

    @Override
    public boolean isEmpty() {
        return size == 0;
    }

    @Override
    public boolean containsKey(Object key) {//是否包含某个key
        for (int i = 0; i < size; i++) {
          if (mapList.get(i).getKey().equals(key)){
              return true;
          }
        }
        return false;
    }

    @Override
    public boolean containsValue(Object value) {//是否包含某个value
        for (int i = 0; i < size; i++) {
            if (mapList.get(i).getKey().equals(value)){
                return true;
            }
        }
        return false;
    }

    @Override
    public V get(Object key) {//根据key获取value
        for (int i = 0; i < size; i++) {
            if (mapList.get(i).getKey().equals(key)){
                return (V)mapList.get(i).getValue();
            }
        }
        return null;
    }

    @Override
    public V put(K key, V value) {//存键值对
        SimpleEntry simpleEntry = new SimpleEntry(key,value);
        for (int i = 0; i < size; i++) {
            if (mapList.get(i).getKey().equals(key)){
                return (V)"添加失败";
            }
        }
            mapList.add(simpleEntry);
            this.size++;
            return (V)"添加成功";

    }

    @Override
    public V remove(Object key) {//删除键值对
        SimpleEntry willRemove = null;
        for (int i = 0; i < size; i++) {
            if (mapList.get(i).getKey().equals(key)){
               willRemove = mapList.get(i);
               break;
            }
        }
        mapList.remove(willRemove);
        this.size--;
        return (V)willRemove;
    }

    @Override
    public void putAll(Map<? extends K, ? extends V> m) {//将一个map中所有键值对加入
        Set set = m.entrySet();
        for(Object obj:set){
            Entry objEntry = (Entry)obj;
            this.put((K)objEntry.getKey(),(V)objEntry.getValue());
        }

    }

    @Override
    public void clear() {//清空键值对
       mapList.clear();
       size=0;
    }

    @Override
    public Set<K> keySet() {//获取键的集合
        Set set = new HashSet();
        for (int i = 0; i < size; i++) {
            set.add(mapList.get(i).getKey());
        }
        return set;
    }

    @Override
    public Collection<V> values() {//获取所有值的集合
        List list = new ArrayList();
        for (int i = 0; i < size; i++) {
            list.add(mapList.get(i).getValue());

        }
        return list;
    }

    @Override
    public Set<Entry<K, V>> entrySet() {//获取所有键值对的集合
        Set set = new HashSet();
        for (int i = 0; i < size; i++) {
            set.add(mapList.get(i));
        }

        return set;

    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder();
        builder.append("{");
        for (int i = 0; i < size; i++) {
            builder.append(mapList.get(i).getKey()).append(" : ")
                    .append(mapList.get(i).getValue()).append("\n");
        }
        builder.append("}");
        return builder.toString();
    }
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值