我想了几个小时,得出结论,一个字符串
全部的
对于窗体的多列主键
CREATE TABLE PlayerStats
(
game_id INTEGER,
is_home BOOLEAN,
player_id SMALLINT,
roster_id SMALLINT,
... -- (game_id, is_home) FK to score, (player_id, roster_id) FK to team member
PRIMARY KEY (game_id, is_home, player_id, roster_id)
)
@Override
public int hashCode()
{
// maxchars:
String surrogate = String.format("%011d", this.gameId) //11
+ String.format("%01d" , this.isHome ? 1 : 0) //1
+ String.format("%011d", this.playerId) //6
+ String.format("%011d", this.rosterId) //6
System.out.println("surrogate = '" + surrogate + "'");
return surrogate.hashCode();
}
当然,这只适用于hashset和Hashtable,而equals也基于此。
我的问题是:这是一个好的总体战略吗?
我可以看出,即时计算可能不是最快的。每当复合键值发生更改时,您可能需要重新计算哈希代码(例如,从对键属性进行操作的每个setter中调用rehash()方法)。
欢迎提出建议和改进。这方面没有什么众所周知的策略吗?一种模式?