i07*_*707 1 java design-patterns hashmap
我有以下场景(比实际业务目的修改了一个)。
class Person { int personId; String weekStartDate; }HashMap<List<Person>, Integer>- 关键是一个人的 13 周数据,值是预测有没有更好的方法来处理上述情况?任何支持此类场景的设计模式
取决于:hashCode()的实现使用列表的元素。因此,稍后添加元素会更改该操作的结果:
public int hashCode() {
int hashCode = 1;
for (E e : this)
hashCode = 31*hashCode + (e==null ? 0 : e.hashCode());
return hashCode;
}
Run Code Online (Sandbox Code Playgroud)
映射不是为可以更改其哈希值的键构建的!当然,以不同的方式实现该方法实际上没有意义。
所以:当你的列表都是immutable时它可以工作,这意味着在将列表用作键后,列表及其任何成员都不会被修改。但是有一定的风险:如果您稍后忘记了该合同,并且这些列表看到了修改,那么您将遇到有趣的问题。