1

如主题: Is equals() 影响向量 add() remove() 方法的行为。

我有Vector<T> v;

remove()1.如果我不重新定义equals()或在其中hashCode()起作用,该方法是否正确type T

add()2.如果我不重新定义equals()或在其中hashCode()起作用,该方法是否正确type T

4

1 回答 1

4
  1. 如果您没有定义equals()for TVector.remove将使用默认equals()实现,即对象标识 ( ==)。
  2. Vector.add()不使用equals()。它会很高兴地添加重复项。

在任何一种情况下,Vector根本不使用hashCode,因此执行hashCode(或缺少)根本不会影响操作Vector。但是,如果重新定义equals()元素类型,则必须重新定义hashCode()其他集合结构才能正常工作。

PS您可能应该使用ArrayList而不是Vector. 从文档中Vector

如果不需要线程安全实现,建议使用ArrayList.Vector

即使需要线程安全的实现,通常最好还是提供自己的同步。提供的单函数调用同步Vector通常在错误的粒度上。

于 2012-11-25T16:46:25.023 回答