[英]Implementing an IDManager in Java - efficient way
IDManager API提供2種方法
您能幫我有效地解決這個問題嗎? -與在最佳DS中使用一樣,存儲和維護ID的最佳方法是什么?
謝謝!
將使用的ID存儲在HashSet
,並將最后生成的ID保留在單獨的變量中。
當有人調用get_ID
,增加最后生成的ID並確認它不在HashSet
。 繼續執行此操作,直到找到HashSet中沒有的ID。 當您發現HashSet
沒有的那個時,添加它並返回值。
當有人調用free_ID(id)
,只需將其從HashSet
刪除即可。
對於對get_ID
的前21億次調用,ID值將繼續遞增,並在每次調用中給出唯一的ID。 然后,整數將滾動並開始重新使用ID。 到那時,檢查它是否在HashMap
將啟動,並且get_ID
方法將花費更長的時間,因為它繼續檢查值以查找未使用的方法。
如果這成為問題,其中有數十億個ID值請求進入,那么您可以創建一個Queue
來保存已使用和釋放的ID。 一旦ID值達到最大值,您就可以從隊列的開頭開始分配值,而不用增加計數器並進行搜索。 但是,如果有必要,我只會添加這部分,因為它將需要8 GB的RAM來容納整個列表。
另一種可能性是您希望您的ID始終是最低值。 如果是這種情況,那么您應該如上所述使用Queue
,但是讓get_ID
在增加並生成新ID之前檢查隊列。 這樣,如果有任何空閑的ID號,則會在創建新的更高值之前使用它們。 該隊列將僅與您不再使用的ID一樣大,因此它將根據您的需求大小進行擴展。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.