Java 从多集删除

Java 从多集删除,java,Java,因此,我的任务是创建一个方法,从多重集合中删除一个元素。我已经试了一段时间了,但遗憾的是没有成功。我的代码如下: import java.util.*; public class MultiSet<E> extends AbstractCollection<E> { private HashMap<E, Integer> elements; private int noOfElems; public MultiSet() { elements =

因此,我的任务是创建一个方法,从多重集合中删除一个元素。我已经试了一段时间了,但遗憾的是没有成功。我的代码如下:

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方法。任何能帮助我的东西,即使是一些关于从哪里开始的建议,都将不胜感激。谢谢此外,对我的代码的其余部分的注释也将得到赞赏

此多集仅将元素存储为映射到出现次数计数的哈希键。要删除元素的所有实例,只需删除键:

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);
    }
  }
}
顺便说一句,很难相信这是你的代码。如果您对已经编写的方法有足够的了解,那么您怎么可能连从何处开始删除都不知道呢