我hashCode()
在我的一个对象 ( instance of A
) 中使用覆盖来为该对象生成一个唯一的整数 ID。唯一性仅取决于 ( instances of B
) 中的元素ArrayList
( I
)。
以下是 的定义I
:
public class I extends ArrayList<B> {
//object of this class will iterate over this array
private B[] arrayOfB;
//other methods and variable to do something
...
}
类的定义B
public class B {
private SomeEnum type;
private Object value; //this can be Integer, String, or some object defined by me
//getters for both private variables
...
}
类的定义A
public class C implements Iterable {
private I myIterable;
@Override
public int hashCode() {
int result = 17;
for(B b: myIterable) {
result = 31 * result + b.getType().hashCode();
result = 31 * result + b.getValue().hashCode();
}
return result;
}
//other methods for this class
...
}
如您所见,我遍历了所有对象myIterable
并构造了 final hash
。结果取决于type
并value
包含在每个b中myIterable
。我注意到的是,这个值会随着程序的不同运行而变化,这会产生一个问题,因为程序正在创建重复的对象。
我可以为相关枚举实现 hashCode() 但我想知道是否有其他方法来处理这个问题。以下是我的问题:
- 相等字符串的 hashCode() 可以在运行时之间改变吗?
- 相同枚举值的 hashCode() 可以在运行时之间更改吗?
注意:我知道我的实现将根据b inA.hashCode()
的顺序返回不同的哈希值,这是不希望的。我正在修复它,以便顺序不重要。myIterable