首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MultiSet中删除

从MultiSet中删除
EN

Stack Overflow用户
提问于 2013-12-10 10:42:53
回答 1查看 685关注 0票数 0

因此,我的任务是创建一个从MultiSet中删除元素的方法。我已经尝试了一段时间,但遗憾的是徒劳无功。我的代码如下:

代码语言:javascript
复制
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方法。任何对我有帮助的东西,即使是一些关于从哪里开始的建议,都将非常感谢。谢谢!(另外,对我其余代码的评论也将不胜感激)

EN

回答 1

Stack Overflow用户

发布于 2013-12-10 10:51:39

这个多集只是将元素存储为映射到出现次数计数的散列键。要删除元素的所有实例,只需删除键:

代码语言:javascript
复制
public void remove_all(E e) {
  elements.remove(e);
}

如果只需要删除一个实例,则递减计数,除非它已经是1。在这种情况下,删除键。

代码语言:javascript
复制
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);
    }
  }
}

顺便说一句,很难相信这就是你的代码。如果您对已经编写的方法有足够的了解,那么您怎么会不知道从哪里开始使用remove呢?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20485047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档