带有2个密钥的Java Collection

Jai*_*iro 5 java collections implementation

我想用一个带有2个组件的键来实现HashMap.防爆.

Pseudocode:

Key = <Component1, Component2>
CollName<Key, Val> coll = new CollName<Key, Val>;

考虑到Collection的速度和大小,我如何在Java中实现它.感谢:D

Hei*_*upp 7

您需要一个包含两个键的辅助(复合键)类

public class CompositeKey<... , ...> {
   ... component1;
   ... component2;

   // getter , setter, ...

   // equals

  // hashcode()
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用它作为关键:

CompositeKey cKey = new CompositeKey(1,2);
Map x.put(cKey,val);
Run Code Online (Sandbox Code Playgroud)

在这里实施equals()hashCode()以良好的方式非常重要.大多数IDE可以在这里为您提供帮助.重要的是,hashCode返回一个"唯一"值,以防止密钥的哈希冲突(即返回一个常量值是最坏的情况,因为所有值都会在同一个桶中结束).许多哈希码的实现都在做

hashcode = component1.hashCode() + 37* component2.hashCode();
Run Code Online (Sandbox Code Playgroud)

如果您想了解更多详细信息,请挖掘出任何讨论散列算法的CS书籍.

如果你想用它来持久化,也可以看看这篇博文.