How can i generate a long hash of a String?

后端 未结 4 2013
没有蜡笔的小新
没有蜡笔的小新 2021-01-04 21:27

I have a java applciation in which I want to generate long ids for strings (in order to store those strings in neo4j). In order to avoid data duplication, I wou

相关标签:
4条回答
  • 2021-01-04 21:52

    This code will calculate pretty good hash:

    String s = "some string";
    long hash = UUID.nameUUIDFromBytes(s.getBytes()).getMostSignificantBits();
    
    0 讨论(0)
  • 2021-01-04 21:53

    long has 64 bits. A String of length 9 has 72 bits. from pigeon hole principle - you cannot get a unique hashing for 9 chars long strings to a long.

    If you still want a long hash: You can just take two standard [different!] hash functions for String->int, hash1() and hash2() and calculate: hash(s) = 2^32* hash1(s) + hash2(s)

    0 讨论(0)
  • 2021-01-04 22:04

    There are many answers, try the following:

    • http://stackoverflow.com/questions/415953/generate-md5-hash-in-java EDIT: removed, I've missed the long requirement. Mea culpa.
    • http://en.wikipedia.org/wiki/Perfect_hash_function

    Or, as suggested before, check out the sources.

    PS. One more technique is to maintain a dictionary of strings: since you're unlikely to get 264 strings any time soon, you can have perfect mapping. Note though that that mapping may as well become a major bottleneck.

    0 讨论(0)
  • 2021-01-04 22:12

    Why don't you have a look a the hashcode() function of String, and just adopt it to using long values instead?

    Btw. if there was a way to create a unique ID for each String, then you would have found a compression algorithm that would be able to pack every String into 8 bytes (not possible by definition).

    0 讨论(0)
提交回复
热议问题