使用自定义复合键类(推荐)

创建一个不可变类,重写 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数组。
这个工具类内部实现原理上和【使用自定义复合键类】相同。