从MultiSet中删除

时间:2013-12-10 02:42:53

标签: java

所以我的任务是创建一个从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方法。任何能够帮助我的东西,甚至是关于从哪里开始的一些指示,都将不胜感激。谢谢! (另外,对我的其余代码的评论也将受到赞赏)

1 个答案:

答案 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