与主题一样:equals()是否影响vector add()remove()方法行为。
我有Vector<T> v;
1.如果我不在remove()
重新定义equals()
或hashCode()
功能,type T
方法是否正常?
2.如果我不在add()
重新定义equals()
或hashCode()
函数,type T
方法是否正常?
答案 0 :(得分:4)
equals()
定义T
,Vector.remove
将使用默认的equals()
实施,即对象标识(==
)。< / LI>
Vector.add()
不使用equals()
。它会愉快地添加重复项。在任何一种情况下,Vector
根本不使用hashCode
,因此hashCode
(或缺少{}}的实施不会影响Vector
的操作。但是,如果您为元素类型重新定义equals()
,则必须重新定义hashCode()
以使其他集合结构正常工作。
P.S。您可能应该使用ArrayList
而不是Vector
。来自the docs for Vector
:
如果不需要线程安全的实现,建议使用
ArrayList
代替Vector
。
即使需要线程安全的实现,通常也最好提供自己的同步。 Vector
提供的单功能呼叫同步通常是错误的粒度。