用java实现用队列模拟售票窗口排队问题
时间: 2024-10-06 10:05:31 浏览: 13
在Java中,我们可以使用`LinkedList`来模拟售票窗口的排队问题。假设我们有一个无限长的队列表示等待区,每个元素代表一个顾客及其到达时间,可以使用`PriorityQueue`(优先级队列)来保持先到先服务的原则。`PriorityQueue`默认按元素自然排序,但如果需要自定义比较规则,可以传入一个`Comparator`。
下面是一个基本的实现:
```java
import java.util.*;
class Customer {
int arrivalTime; // 顾客到达的时间
String id; // 顾客的ID
Customer(int arrivalTime, String id) {
this.arrivalTime = arrivalTime;
this.id = id;
}
@Override
public int compareTo(Customer other) {
return Integer.compare(this.arrivalTime, other.arrivalTime); // 先到先服务
}
}
class TicketWindow {
private PriorityQueue<Customer> queue;
public TicketWindow() {
queue = new PriorityQueue<>();
}
public void enqueue(Customer customer) {
queue.offer(customer);
}
public boolean serveNext() {
if (!queue.isEmpty()) {
Customer currentCustomer = queue.poll();
System.out.printf("Serving customer %s at time %d\n", currentCustomer.id, currentCustomer.arrivalTime);
return true;
}
return false;
}
}
public class Main {
public static void main(String[] args) {
TicketWindow window = new TicketWindow();
// 添加顾客示例
window.enqueue(new Customer(1, "A"));
window.enqueue(new Customer(3, "B"));
window.enqueue(new Customer(2, "C"));
while (window.serveNext());
}
}
```
在这个例子中,`enqueue`方法将顾客加入队列,`serveNext`方法尝试服务下一个到达最早的顾客。如果队列为空,则返回`false`表示没有顾客可以服务。
阅读全文