多KeyMap
使用自定义复合键类(推荐)
创建一个不可变类,重写 equals() 和 hashCode() 方法,确保多个参数组合的唯一性。
优势:类型安全、代码清晰、避免拼接字符串的潜在冲突。
public final class CompositeKey {
private final String param1;
private final int param2;
public CompositeKey(String param1, int param2) {
this.param1 = param1;
this.param2 = param2;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
CompositeKey that = (CompositeKey) o;
return param2 == that.param2 && Objects.equals(param1, that.param1);
}
@Override
public int hashCode() {
return Objects.hash(param1, param2);
}
}
// 使用示例
Map<CompositeKey, String> map = new HashMap<>();
map.put(new CompositeKey("a", 1), "value");
第三方库工具
Apache Commons 提供 MultiKey 类:
Map<MultiKey, String> map = new HashMap<>();
map.put(new MultiKey("a", 1), "value");
MultiKey该类在commons-collections4.4.1 版本时最多支持5个key参数的构造类,或者一个keys数组。
这个工具类内部实现原理上和【使用自定义复合键类】相同。
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果