【问题标题】:Problems with add/remove/equals/string-method in MultiSet-classMultiSet-class 中的 add/remove/equals/string-method 的问题
【发布时间】:2012-01-17 01:00:50
【问题描述】:

这是我的课:

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;
        }
    }

所以基本上,我需要正确实现我的添加/删除方法,以向/从Set 添加或删除元素。

对我来说,我的equals 似乎是正确的,但 Eclipse 在一行中这么说:

MultiSet<E> o = (MultiSet<E>) object;

有一个unchecked cast from object to Multiset&lt;E&gt; 有什么想法吗?

另外,在我的toString 方法中,我不确定如何定义“res”?

谢谢, // 克里斯

【问题讨论】:

  • 出于兴趣,您如何期望this == null 评估为真?我怀疑你的意思是object == null
  • 这是一个愚蠢的错误。谢谢!虽然,我仍然收到相同的错误消息:/
  • 我认为我的添加/删除方法现在可以工作了。
  • 但我的 String toString 仍然丢失。任何人都可以看看它来帮助我吗?

标签: java multiset


【解决方案1】:

改用这个:

MultiSet<?> o = (MultiSet<?>) object;

由于泛型在 java 中的实现方式,这是必要的。

【讨论】:

  • 非常感谢。这解决了equals中的错误消息。你有关于 add/remove/string-methods 的 cmets 吗?
  • @Chris - 您对这些方法的具体问题是什么?
猜你喜欢
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-03
  • 1970-01-01
  • 2011-07-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多