2016-09-29 129 views
1

我需要從可以是任意長度的字符串種子中生成長度爲10個或更多數字的唯一Long。在正常情況下,這將是不可能做到,因爲有更多的String排列比Long可以存儲,但是我知道,系統將不會產生更多的Strings比我能在Long存儲,我怎麼能產生獨特Long在這種情況下每個String爲唯一的字符串種子生成唯一的長整數

我不能使用動態完美哈希,因爲太耗時了,我不能使用最小完美哈希函數,因爲我不想要生成數字seqentional。

編輯:我無法存儲有關已處理字符串的任何信息,包括他們

+0

嗯......如果有可能,我們還會使用地圖嗎? – dit

回答

4

的量可以使用計數器這樣

final AtomicLong counter = new AtomicLong(); 
final Map<String, Long> idMap = new LinkedHashMap<>(); 

public long idFor(String s) { 
    return idMap.computeIfAbsent(s, isMap::incrementAndGet); 
} 

這將返回一個唯一的ID爲每個字符串。

+0

這將是一個很好的解決方案,但我不能存儲任何關於已處理字符串的信息,包括已處理字符串的數量(將添加此規則以發佈) –

+2

@AkakaJaworek沒有存儲任何信息,您需要一個散列策略,它將是隨機的比獨特。 –

+0

@AkkaJaworek或者您需要將字符串解析爲唯一編號的方法。例如說,該字符串包含一個您可以解析的唯一編號。 –

相關問題