为了账号安全,请及时绑定邮箱和手机立即绑定

在这章节中重写 equals 的作用,是什么,在哪里有掉用过?

提个问题: item实体类中重写的的equals方法不知道哪里有掉用过,,,

正在回答

2 回答

public boolean addGoodsInCart(items item, int number) {
		if (goods.containsKey(item)) {
			goods.put(item, goods.get(item) + number);
		} else {
			goods.put(item, number);
		}
		calTotalPrice();
		return true;
	}

map和set集合比较是否包含某一个元素,需要重写equals和hashcode方法。

list集合比较是否包含某一个元素,需要重写equals方法。

建议再好好学习下泛型,基础知识不够牢固。

如果不重新写,goods会把两个同样的item给添加进来。因为这两个item虽然属性相同但其实是不同的对象。

3 回复 有任何疑惑可以回复我~
#1

Angular_Dracula 提问者

非常感谢!确实如此~
2016-03-04 回复 有任何疑惑可以回复我~
#2

iMcLaren

看了hashmap的源代码。里面写着使用containsKey()方法后可以覆盖原来的的相同键值对(If the map previously contained a mapping for the key, the old) 就是看不懂哪一段代码表示调用这个方法后可以使覆盖enable。。。还是图样。。。我在楼下贴一下代码吧。。
2016-05-12 回复 有任何疑惑可以回复我~
#3

小小徐life

逗比 原因是containsKey() 方法里面调用了hsahCode() equals()方法; 没看源代码就出来装逼了 这样不好
2016-05-26 回复 有任何疑惑可以回复我~
#4

慕神7267176

为什么list集合只需要重写equals()方法,难道就不需要重写hashcode()方法来保证地址一样吗
2016-11-07 回复 有任何疑惑可以回复我~
查看1条回复
    final Node<K,V> getNode(int hash, Object key) {
        Node<K,V>[] tab; Node<K,V> first, e; int n; K k;
        if ((tab = table) != null && (n = tab.length) > 0 &&
            (first = tab[(n - 1) & hash]) != null) {
            if (first.hash == hash && // always check first node
                ((k = first.key) == key || (key != null && key.equals(k))))
                return first;
            if ((e = first.next) != null) {
                if (first instanceof TreeNode)
                    return ((TreeNode<K,V>)first).getTreeNode(hash, key);
                do {
                    if (e.hash == hash &&
                        ((k = e.key) == key || (key != null && key.equals(k))))
                        return e;
                } while ((e = e.next) != null);
            }
        }
        return null;
    }

    /**
     * Returns <tt>true</tt> if this map contains a mapping for the
     * specified key.
     *
     * @param   key   The key whose presence in this map is to be tested
     * @return <tt>true</tt> if this map contains a mapping for the specified
     * key.
     */
    public boolean containsKey(Object key) {
        return getNode(hash(key), key) != null;
    }


0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

在这章节中重写 equals 的作用,是什么,在哪里有掉用过?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信