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

标签 java hashtable

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

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

我也考虑过这样一种可能性,如果我为一个变量创建我自己的散列函数,或者甚至是一个实现 Map 的新数据类型,我应该能够做到这一点,但它可能有点困惑。也许不是?

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

最佳答案

我认为使用现有 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);

这个 TreeMap 认为所有的键都是平等的,但在其他方面会保持很好的 Map 语义。

请注意,您放入 Map 中的第一个键将永远保留在其中,除非您将其删除

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

因此,例如,如果您计划检查 entrySet,您可能会记住这一点。

关于java - 是否可以创建一个每个键都指向相同值的映射?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28554878/

相关文章:

java - 扩展 jframe 的大小?

java - Spring 3 MVC + MySQL : cannot store € character

c# Hashtable 按键排序

powershell - 我可以在不覆盖 'keys' 成员的情况下将名为 'keys' 的键添加到哈希表吗

Java Hashtable put 方法减慢了我的应用程序的速度

java - 合并两个哈希表并删除 java 中的重复项

java - 从Java方法返回后如何访问返回数据

Java多线程仅用于2台计算机,如何在main中执行

java - java的UTF-16字符编码

C++ - 将哈希表复制到另一个哈希表