2012-03-05 30 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是全球唯一的,所以你知道没有两个学生会得到同一个。而且,既然你有一个订单,你可以在以后的时间建立一个列表,而不必担心在产生时间。