将字符串转换为哈希,然后稍后再修改字符串
我需要对一些字符串进行哈希处理,以便将它们传递到一些库中,这是使用String.hashCode调用直接进行的。
但是,一旦处理完所有内容,我想将从哈希代码生成的整数转换回字符串值。我显然可以在其他地方跟踪字符串和哈希码值并在那里进行转换,但我想知道Java中是否有任何东西可以自动执行此操作。
我需要对一些字符串进行哈希处理,以便将它们传递到一些库中,这是使用String.hashCode调用直接进行的。
但是,一旦处理完所有内容,我想将从哈希代码生成的整数转换回字符串值。我显然可以在其他地方跟踪字符串和哈希码值并在那里进行转换,但我想知道Java中是否有任何东西可以自动执行此操作。
我认为你误解了哈希的概念。哈希是单向函数。更糟糕的是,两个字符串可能会生成相同的哈希。
所以不,这是不可能的。
hashCode()
通常不会是双射,因为它通常不会是注入映射。
hashCode()
以 s 作为其范围。只有2 ^ 32个不同的值,因此对于任何可能有超过2 ^ 32个不同值的对象(例如,想想),您可以保证(根据鸽子洞原则,至少两个不同的对象将具有相同的哈希代码。int
int
Long
唯一能给你的保证是,如果 ,那么 .具有相同哈希代码的每个对象都与此一致。hashCode()
a.equals(b)
a.hashCode() == b.hashCode()
在某些非常有限的情况下,您可以使用 来唯一标识对象:您必须具有一个特定的类,其中可能的不同实例不超过 2^32 个(即,您的类中最多有 2^32 个成对的对象)。在这种情况下,只要您确保无论何时和两者都是您的类的对象,那么,您将在对象和哈希代码之间(等价类)之间有一个双射。(例如,对于类,可以像这样完成。hashCode()
!a.equals(b)
!a.equals(b)
a
b
a.hashCode() != b.hashCode()
Integer
但是,除非您处于这种非常特殊的情况下,否则您应该以其他方式创建一个唯一的ID。