是否可以创建一个每个键都指向相同值的映射?

Add*_*son 7 java hashtable

是否有可能(在Java中)创建一个Map,无论我要搜索什么键,我都会检索到相同的值?我们可以假设有限或无限数量的密钥。

我考虑了大小为 1 且负载因子为 1.0 的映射,并将该值存储在其中,但我几乎肯定 hashmap 实现会识别冲突,并无论如何返回 null。

我还考虑了这样一种可能性:如果我为变量创建自己的哈希函数,甚至是实现 Map 的新数据类型,我应该能够做到这一点,但可能有点混乱。也许不是?

当然,简单地将值映射到每个键将是非常低效的(除非有一个内置的方法,我忽略了),而且远没有听到 SO 的答案那么有趣。

Rad*_*def 6

我认为使用现有 API 执行此操作的最合理方法如下:

// Java 6/7
new TreeMap<K, V>(new Comparator<K>() {
    @Override
    public int compare(K lhs, K rhs) {
        return 0;
    }
});

// Java 8+
new TreeMap<K, V>((a, b) -> 0);
Run Code Online (Sandbox Code Playgroud)

TreeMap认为所有键都是相等的,但否则会保持相当好的 Map 语义。

请注意,您放入地图中的第一个钥匙将永远保留在其中,除非您remove这样做。

IE

m.put("abc", "123");
m.put("def", "456");
// prints something like {abc=456}
System.out.println(m);
Run Code Online (Sandbox Code Playgroud)

因此,例如,如果您计划检查entrySet.

  • 有创意的回答!我没有想到比较器,因为我以前从未在实践中使用过。我会尝试一下,谢谢。 (2认同)