@Override
    public boolean equals(Object o) {
        // as required by interface
        if (o == null) {
            return false;
        }
        Map.Entry<?, ?> e;
        if (o instanceof Map.Entry) {
            e = (Map.Entry<?, ?>) o;
        } else {
            return false;
        }
        Object ek = e.getKey();
        Object ev = e.getValue();
        return Util.equiv(key,  ek) && Util.equiv(val,  ev);
    }