簡體   English   中英

從字符串生成唯一的 integer ID

[英]Generating a unique integer ID from a String



我需要為字符串生成一個唯一的 integer id。

原因:
我有一個可以在不同數據庫上運行的數據庫應用程序。 該數據庫包含從外部xml 數據生成的參數類型的參數。 目前的情況是我使用枚舉的序數。 但是當插入或刪除參數時,序數會混淆:
(食品 = 0,玩具 = 1)<-->(食品 = 0,非食品 = 1,玩具 = 2)

參數類型的數量在 200 到 2000 之間,所以我有點害怕使用 hashCode() 作為字符串。

PS:我使用的是Java。

非常感謝

我會使用數據庫中的映射表到 map 這些字符串到自動增量值。 然后應將這些映射緩存在應用程序中。

使用加密 hash。 MD5 可能就足夠了,而且速度相對較快。 對於您的輸入集,它將是獨一無二的。

如何生成 MD5 hash?

唯一的問題是 hash 是 128 位的,因此標准的 64 位 integer 將無法容納它。

如果您需要絕對確定 id 是唯一的(沒有沖突)並且您的字符串最多為 32 個字符,並且您的號碼必須不超過 10 位(大約 32 位),那么您顯然不能做到這一點方式 function id=F(string)

自然的方法是在數據庫或應用程序中保留字符串到唯一數字(通常是序列)的一些映射。

我遇到了這個明智的帖子: How to convert string to unique identifier in 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;
}

如果您知道字符串值的類型(長度、字母模式),則可以計算該集合中的字符串總數,如果它適合 32 位,則計數 function 就是您的 integer 值。

否則,字符串本身就是您的 integer 值(數學術語中的整數,而不是 Java)。

枚舉是指 Java 枚舉? 然后你可以自己給每個枚舉值一個唯一的 int 而不是使用它的序數:

public enum MyEnum {

    FOOD(0),
    TOYS(1),

    private final int id;

    private MyEnum(int id)
    {
        this.id = id;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM