簡體   English   中英

如何將位組合成一個long以創建唯一ID?

[英]How can I assemble bits into a long to create a unique ID?

我想編寫一個實用程序,它將在Java中為我提供一個相對唯一的ID。 很簡單,例如時間戳記中的x位和隨機數中的y位。

因此,我將如何實現以下方法:

long getUniqueID()
{
    long timestamp = System.currentTimeMillis();
    long random = some random long

    ...

    return id;
}

獎金

對我可以用來形成ID的其他易於獲得的信息有什么建議嗎?

注意:我知道GUID,並且我知道Java具有UUID類,但是我不想要128位長的東西。

只需剪掉不需要的部分:

return java.util.UUID.randomUUID().getLeastSignificantBits();

您試圖做的是創建一個將兩個長值組合成一個長值的哈希函數 在這種情況下,哈希函數的均勻性至關重要,因為創建的唯一ID值中的沖突是不可接受的。 但是,如果您可以將哈希值與先前創建的標識符進行比較,則可以通過修改哈希直到沒有沖突發生來解決沖突。

例如,您可以獲取時間戳,並對隨機值執行異或 (使用Java中的caret ^運算符)。 如果檢測到沖突,則將結果加一。

如果在同一個JVM中唯一就足夠了,那么應該執行類似的操作。

public class UniqueID {
  static long current= System.currentTimeMillis();
  static public synchronized long get(){
    return current++;
    }
}

暫無
暫無

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

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