2012-03-05 28 views
0

我只是偶然發現了一個很簡單的問題。假設你有分配給學生的整數值(例如時間段)。每個學生都會發送時間分配請求,並隨機給出一個。時隙分配 - 設計和方法

我想acieving的以下列:

List<Integer> possibleSlots; 
Map<Integer, Student> allocatedSlots; 

現在爲每個請求我會做某事,如:

Random r = new Random(); 
int slot = possibleSlots.removeAt(r.next(possibleSlots.size())); 
allocatedSlots.put(slot, student); 

請問下面的方法是某事適合作爲一般的場景隨機分配插槽,並且在沒有使用可能的插槽列表的情況下保存誰有哪個插槽或有沒有更好的方法?

回答

1

您可能需要檢查你有沒有用完插槽。

你可能需要:

r.nextInt(possibleSlots.size()) 

,因爲你需要一個整數索引。

你並不需要一個新的隨機爲每個分配 - 你可以只創建一個和重新使用它。

否則,只要有一個線程看起來是合理的 - 上述方法不需要額外的工作線程安全。

1

如果要生成隨機插槽列表而不保留實際可能插槽列表,可以考慮使用某種全局唯一標識符與排序組合。

例如,您可以爲每個學生分配一個UUID.randomUUID()。然後,當您需要查看它們的順序時,請根據其自然順序比較UUID。

由於統計學上保證UUID是全球唯一的,所以你知道沒有兩個學生會得到同一個。而且,既然你有一個訂單,你可以在以後的時間建立一個列表,而不必擔心在產生時間。