java - 在 IdentityHashMap 中使用字符串作为键

标签 java hashmap

我有一个简单的 IdentityHashmap:

IdentityHashmap<String, Integer> map;

现在我想使用字符串作为键。主要问题是 java 字符串池:

String a = "Hello";
String b = "Hello";
map.put(a, 1);
map.put(b, 2);
System.out.println(map.get(a)) //Prints "2" since a == b

我知道我可以通过使用 new String("Hello") 而不是 "Hello" 来避免这个问题,但是我得到了 String 作为参数,因为我不能'不要强制用户使用新的构造函数我不知道如何解决这个问题。

最佳答案

I use it in some serialization system. Which allows the user to save and delete objects without rewriting the whole file by using: File.save(Object o) File.delete(Object o) If some object is equals to some other they still need to get stored separately

在这种情况下,您既不需要值(value)也不需要身份。至少不是 == 给你的堆标识。您需要文件偏移标识。您正试图违反设计原则。你永远不应该试图强制一个属性意味着两件事。你需要另一个属性(property)。要么强制用户使用将堆引用与其文件偏移位置耦合的结构删除对象,要么将所有对象包装在将具有文件位置的对象中。

关于java - 在 IdentityHashMap 中使用字符串作为键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29458368/

相关文章:

java - 无法在运行时设置 SolrDocument 注释

java - 将单词存储到 Hashmap 中

java - 帮助java HashMap

java - 初始化java字节数组: possible loss of precision

java - 未索引字段的部分更新

java - 子列表内使用 HashMap 进行映射

perl - 如何在 Perl 中检测散列中的空字段?

java - 具有不同 hashCode 的两个键是否可以成为 Java 中 HashMap 中同一存储桶的一部分?

java - API设计中如何引入特殊情况?

java - 在大型应用程序中处理事务管理