Java MultiSet类中的add/remove/equals/string方法存在问题
这是我的班级:Java MultiSet类中的add/remove/equals/string方法存在问题,java,multiset,Java,Multiset,这是我的班级: public class MultiSet<E> extends AbstractCollection<E> { private int size = 0; private Map<E, Integer> values = new HashMap<E, Integer>(); public MultiSet() { } public MultiSet(Collection<
public class MultiSet<E> extends AbstractCollection<E>
{
private int size = 0;
private Map<E, Integer> values = new HashMap<E, Integer>();
public MultiSet()
{
}
public MultiSet(Collection<E> c)
{
addAll(c);
}
@Override
public boolean add(E o)
{
throw new UnsupportedOperationException();
}
@Override
public boolean remove(Object o)
{
throw new UnsupportedOperationException();
}
public Iterator<E> iterator()
{
return new Iterator<E>()
{
private Iterator<E> iterator = values.keySet().iterator();
private int remaining = 0;
private E current = null;
public boolean hasNext()
{
return remaining > 0 || iterator.hasNext();
}
public E next()
{
if (remaining == 0)
{
remaining = values.get(current);
}
remaining--;
return current;
}
public void remove()
{
throw new UnsupportedOperationException();
}
};
}
public boolean equals(Object object)
{
if (this == object) return true;
if (this == null) return false;
if (this.getClass() != object.getClass()) return false;
MultiSet<E> o = (MultiSet<E>) object;
return o.values.equals(values);
}
public int hashCode()
{
return values.hashCode()*163 + new Integer(size).hashCode()*389;
}
public String toString()
{
String res = "";
for (E e : values.keySet());
//res = ???;
return getClass().getName() + res;
}
public int size()
{
return size;
}
}
有一个从对象到多集的未选中强制转换
有什么想法吗
另外,在我的toString
方法中,我不完全确定如何定义“res”
谢谢,
//克里斯用这个代替:
MultiSet<?> o = (MultiSet<?>) object;
MultiSet o=(MultiSet)对象;
这是必要的,因为泛型是如何在java中实现的。出于兴趣,您希望
this==null
如何计算为true?我猜你的意思是object==null
。那是个愚蠢的错误。谢谢尽管如此,我仍然收到相同的错误消息:/i我认为我的添加/删除方法正在工作。但是我的字符串toString仍然丢失。谁能看看它来帮助我吗?非常感谢。这将在equals中解决错误消息。你对add/remove/string方法有什么评论吗?@Chris-你对这些方法有什么具体的问题?
MultiSet<?> o = (MultiSet<?>) object;