2010-12-15 59 views
0

我使用左移運算從Java到產生一些獨特的編號,與按位&運營商驗證相同像下面的按位與操作。唯一的編號生成移位運算和驗證同樣在Java

// Number generation 

public final static long UNIQUE_NUMBER8 = (long) 1 << 8; 
public final static long UNIQUE_NUMBER9 = (long) 1 << 9; 
public final static long UNIQUE_NUMBER10 = (long) 1 << 10; 

直到

public final static long UNIQUE_NUMBER62 = (long) 1 << 62; 

而同樣的驗證,我使用下面的條件做, 其中request_number是URL中,分配給 網址相同生成的數字來 -

if (request_number >= 0 && (request_number & UNIQUE_NUMBER10) != 0){ 
    System.out.println("Valid"); 
}else{ 
    System.out.println("Invalid"); 
} 

但使用上述條件我不能驗證上面的數字1 < < 62, 因爲正在使用的所有數字,直到62和它上面將產生已經被使用,並且因此 按位&條件失敗 再次同一號碼。

請幫助我使用上述或類似的邏輯 生成唯一編號,並驗證與按位運算符&相同。

謝謝

+0

嗨。這是你的第七個**問題,現在你應該有格式化的問題。當你問你的問題時,右邊有一個標有** How to Format **的框。值得一讀。另外,Ask a Question框上方的** [?] **鏈接有很多格式化信息。 – 2010-12-15 11:52:58

+0

感謝您的信息T.J Crowder。下次我會照顧它.. – techiepark 2010-12-15 12:16:13

回答

3

您檢查數量是否定的。你只能有0位到第62集,仍然是負數。

也許你應該使用BitSet中,你並不需要所有的常量,你可以有幾乎任何位數。

但是,要生成唯一的ID,您可以創建UUID,也可以使用System.currentTimeMillis()(檢查重複項)或AtomicLong.incrementAndGet(),具體取決於所需的唯一ID類型。

這些方法避免需要通過增加始終用來生成ID的數量要記住以前的ID。 UUID在系統中是唯一的,但是相對比較複雜,即使系統重新啓動(並且具有內置時間戳),使用currentTimeMillis也是唯一的,AtomicLong是最輕的,但在系統執行時重新啓動。

0

使用BitSet對你是一個更好的選擇。