所以我的任务是创建一个从MultiSet中删除元素的方法。我已经尝试了一段时间,但遗憾的是徒劳无功。我的代码如下:
import java.util.*;
public class MultiSet<E> extends AbstractCollection<E> {
private HashMap<E, Integer> elements;
private int noOfElems;
public MultiSet() {
elements = new HashMap<E, Integer>();
noOfElems= 0;
}
public MultiSet(Collection<E> c) {
this();
addAll(c);
}
public int size() {
return noOfElems;
}
public Iterator<E> iterator() {
return new Iterator<E>() {
Iterator<E> iterator = elements.keySet().iterator();
int elemsLeft = 0;
E thisElem = null;
public boolean hasNext() {
return iterator.hasNext();
}
public E next() {
if (elemsLeft == 0) {
thisElem = iterator.next();
elemsLeft = elements.get(thisElem);
}
elemsLeft -= elemsLeft;
return null;
}
public void remove() {
throw new UnsupportedOperationException();
}
};
}
public boolean add(E e) {
Integer i = elements.get(e);
if(i == null) {
i = 1;
} else {
i += 1;
}
elements.put(e, i);
noOfElems++;
return true;
}
public String toString() {
return elements.toString();
}
public int hashCode() {
return elements.hashCode();
}
public boolean equals(MultiSet<E> other) {
if (this == other) {
return true;
}
if (other == null) {
return false;
}
if (this.getClass() != other.getClass()) {
return false;
}
MultiSet<?> obj = (MultiSet<?>) other;
return obj.elements.equals(elements);
}
public boolean remove(Object o) {
}
}
我想实现remove方法。任何能够帮助我的东西,甚至是关于从哪里开始的一些指示,都将不胜感激。谢谢! (另外,对我的其余代码的评论也将受到赞赏)
答案 0 :(得分:0)
这个multiset只是将元素存储为映射到出现次数计数的哈希键。要删除元素的所有实例,只需删除密钥:
public void remove_all(E e) {
elements.remove(e);
}
如果您只需删除一个实例,则递减计数,除非它已经是1.在这种情况下,请删除该键。
public void remove(E e) {
Integer i = elements.get(e);
if (i != null) {
if (i == 1) {
elements.remove(e);
} else {
elements.put(e, i - 1);
}
}
}
BTW有点难以相信这是你的代码。如果你足够了解你已经写过的方法,你怎么能不知道从哪里开始remove
?