在学校,我们需要实现自己的MultiMap类。
当我正在实现remove方法时,遇到了一些问题。
我的问题是当我调用remove方法时,set.Remove(value)返回false。就好像set中不存在该对象一样。
我尝试从主程序中写出对象引用,和从MultiMap类中写出的对象引用,这些对象似乎是相同的。
我在这里缺少什么?
提前感谢。
以下是我的映射代码:
当我正在实现remove方法时,遇到了一些问题。
我的问题是当我调用remove方法时,set.Remove(value)返回false。就好像set中不存在该对象一样。
我尝试从主程序中写出对象引用,和从MultiMap类中写出的对象引用,这些对象似乎是相同的。
我在这里缺少什么?
提前感谢。
以下是我的映射代码:
public class MultiMap<K, V> {
private final Map<K, Set<V>> map = new HashMap<>();
public MultiMap() {
}
public String toString() {
StringBuilder sb = new StringBuilder();
Set<K> keys = map.keySet();
for (K k : keys) {
sb.append("key ");
sb.append(k);
sb.append(" Value ");
sb.append(map.get(k));
}
return sb.toString();
}
public int size() {
return map.size();
}
public boolean put(K key, V value) {
Set<V> set;
if (map.containsKey(key)) {
set = map.get(key);
set.add(value);
} else {
set = new HashSet<>();
set.add(value);
}
return (map.put(key, set) != null) ? false : true;
}
public Set<V> get(K key) {
return map.get(key);
}
public void remove(K key, V value) {
Set<V> set = map.get(key);
System.out.println(value);
System.out.println(set.remove(value));
if(set.isEmpty()) {
map.remove(key);
}
}
主要内容:
public static void main(String[] args) {
Person p = new Person("navn");
Collection<Person> set = new HashSet<>();
set.add(p);
MultiMap map = new MultiMap<>();
map.put(1, set);
System.out.println(map.toString());
System.out.println(map.get(1));
map.remove(1, p);
}
map.get(key)
可能返回null
。例如,请尝试map.remove(2, p)
。 - Guillaume Poussel