从字符串生成唯一的整数ID

| 我需要为字符串生成唯一的整数ID。 原因: 我有一个可以在不同数据库上运行的数据库应用程序。该数据库包含具有从外部xml数据生成的参数类型的参数。 当前的情况是我使用Enum的序数。但是,当插入或删除参数时,这些普通用法会混杂在一起: (食品= 0,玩具= 1)<->(食品= 0,非食品= 1,玩具= 2) 参数类型的数量在200到2000之间,所以我有点担心使用hashCode()作为字符串。 附注:我正在使用Java。 非常感谢     
已邀请:
        我将使用数据库中的映射表将这些字符串映射到自动增量值。然后,应将这些映射缓存在应用程序中。     
        使用加密哈希。 MD5可能足够并且相对较快。对于您的输入集,它将足够独特。 如何生成MD5哈希? 唯一的问题是哈希是128位,因此标准的64位整数将无法保存它。     
        如果您需要绝对确定id是唯一的(无冲突)并且字符串最多可以包含32个字符,并且您的数字不得超过10个数字(约32位),那么您显然不能用一位方向功能
id=F(string)
。 自然的方法是在数据库或应用程序中保留字符串到唯一数字(通常是序列)的某些映射。     
        如果您知道字符串值的类型(长度,字母模式),则可以计算此集合中的字符串总数,如果它适合32位以内,则count函数是您的整数值。 否则,字符串本身就是您的整数值(数学上的整数,而不是Java)。     
        枚举是指Java枚举吗?然后,您可以自己给每个枚举值一个唯一的int,而不是使用其序号:
public enum MyEnum {

    FOOD(0),
    TOYS(1),

    private final int id;

    private MyEnum(int id)
    {
        this.id = id;
    }
}
    
        我遇到了一个明智的帖子:如何在Java中将字符串转换为唯一标识符 作者在其中描述了他的实现:
public static long longHash(String string) {
  long h = 98764321261L; 
  int l = string.length();
  char[] chars = string.toCharArray();

  for (int i = 0; i < l; i++) {
    h = 31*h + chars[i];
  }
  return h;
}
    

要回复问题请先登录注册