@Override
    public boolean equals(Object o) {
        if (o == null) {
            return false;
        }
        if (!(o instanceof Pair)) {
            return false;
        } else {
            Pair<?, ?> oP = (Pair<?, ?>) o;
            return (key == null ?
                    oP.getKey() == null :
                    key.equals(oP.getKey())) &&
                (value == null ?
                 oP.getValue() == null :
                 value.equals(oP.getValue()));
        }
    }