0

这是我的问题。我将数据存储到一个数据库表中,该表有一个存储哈希码的列(或者可以是其他一些唯一字符串,例如 ID,因为 JVM 可以重新定位对象,更改哈希码)。但是一旦我得到那个字符串,我就想访问映射到那个字符串的对象。我可以使用 HashMap 来做到这一点,例如:

ConcurrentHashMap<String, MyClass> MyClassDictionary;

要存储的对象的平均值约为 +800。我可以采取其他选择来避免这种事情,但我真的想知道你们中的一些人是否知道比使用 HashMap 更好的方法。

我发现了一些关于我可以实现的可引用接口,您可以在下一个链接中查看它:http: //docs.oracle.com/javase/jndi/tutorial/objects/storing/reference.html

谢谢阅读。

4

2 回答 2

0

对象的hashCode非常明确地不是唯一的;hashCode()您的方法始终返回 0是非常合法的。您将需要使用其他标识符。

您似乎在这里遇到了两个不同的问题:您的对象是存储在数据库中还是仅存储在内存中?如果它们只在内存中,则没有理由将标识符放入数据库中,因为当程序重新启动时,这些对象将被丢弃。如果它们在数据库中,您需要某种对象关系映射解决方案来从数据库行重新创建 Java 对象,并且您应该查看 JPA。

于 2013-08-01T02:35:24.593 回答
0

您可以使用 HashMap 中的任何键,即Immutable. 字符串本质上是不可变的,这意味着对象无法更改,如果有人试图更改对象,则会创建一个新对象,而原始对象保持原样。因此,如果您使用唯一字符串作为键,那么您是安全的。在任何散列集合中使用不可变键的优点是,您的键对象将始终保留或不变。并且不会有人错误地更改密钥,并导致您失去对值的引用的问题。如果密钥不是不可变的并且它是从代码中的其他地方更改的。然后,您将永远无法获取该键的关联值。这有时被称为 java 中的内存泄漏。

于 2013-08-01T03:10:21.600 回答