首页 > 解决方案 > 如何覆盖 Map 的主要方法

问题描述

我正在尝试实现 Map 接口并希望覆盖其主要方法,但我的方法 put 不起作用。基本上我由于某种原因无法比较字符串。

import java.util.HashMap;

public class MapImpl implements Map {

    private HashMap<Object, Object> aMap = new HashMap<>();
    private int size = 0;


    //should return value object on success put
    @Override
    public Object put(Object key, Object value){
        String middleString = (String)(aMap.get(key));
        String valueString = (String)(value);
        if (middleString.equals(valueString)){
        aMap.put(key,value);

        } else {
            aMap.put(key,value);
            size++;
        }

        return value;
    }

    //should return value by key
  

      @Override
       public Object get(Object key) {
           return aMap.get(key);


    }

    //should return count of all value objects in the map
    @Override
    public int size() {
        return size;
    }

    //should return value object on success removing it by the key
    @Override
    public Object remove(Object key){
        String returnedValue = (String)(aMap.get(key));
        aMap.remove(key);
        size--;
        return returnedValue;
    }

}

put我想通过将值作为字符串来比较我的 Map 中是否有键,但是当值为 null 时,它不会转换为字符串,所以我无法比较它,无论 ide 都不允许我将 null 放入 equals 或放入==操作数以比较 if 语句中的字符串。

标签: javahashmap

解决方案


您可以使用

if (Objects.equals(middleString, valueString)) {

而不是middleString.equals(valueString). 该Objects.equals方法检查你传入的两个引用值是否为null,或者指向同一个对象,或者根据equals方法指向的对象是否相等。

如果您要自己编写相同的检查,它将如下所示:

if (middleString == valueString || (middleString != null && middleString.equals(valueString)) 

推荐阅读