java基本队列操作实现:设计程序实现队列的基本操作,包括入队(offer)和出队(poll)操作,判空(isEmpty)等。 (2)超市购物结账队列模拟:设计程序模拟超市购物结账的场景。使用队列表示顾客排队,实现顾客入队、出队,以及结账的过程。考虑到不同顾客结账所需的时间不同。
时间: 2024-09-30 07:07:28 浏览: 18
在Java中,我们可以使用内置的`java.util.Queue`接口来实现队列的基本操作。下面是一个简单的`Queue`实现,使用了`ArrayDeque`作为底层数据结构,它提供了快速的入队(offer)和出队(poll)操作:
```java
import java.util.concurrent.ArrayDeque;
import java.util.Queue;
public class CustomQueue<T> {
private Queue<T> queue = new ArrayDeque<>();
// 入队操作 - 提供元素到队列尾部
public boolean offer(T item) {
return queue.offer(item);
}
// 出队操作 - 如果队列非空,则移除并返回头部元素,否则返回null
public T poll() {
if (!queue.isEmpty()) {
return queue.poll();
} else {
return null; // 或者抛出异常,如NoSuchElementException
}
}
// 判空 - 检查队列是否为空
public boolean isEmpty() {
return queue.isEmpty();
}
// 结账模拟 - 针对不同时间复杂度的结账过程,这里可以简单地返回一个随机数表示结账时间
public long checkoutTimeForCustomer(T customer) {
// 实际上可以根据业务规则计算每个顾客的结账时间
return Math.random() * 10; // 返回0到9之间的随机数作为模拟值
}
public static void main(String[] args) {
CustomQueue<Integer> checkoutQueue = new CustomQueue<>();
checkoutQueue.offer(1);
checkoutQueue.offer(2);
while (!checkoutQueue.isEmpty()) {
int customer = checkoutQueue.poll();
long checkoutDuration = checkoutQueue.checkoutTimeForCustomer(customer);
System.out.printf("Customer %d takes %d seconds to check out.\n", customer, checkoutDuration);
}
}
}
```
在这个例子中,我们创建了一个名为`CustomQueue`的自定义队列类,包含`offer`, `poll`, 和 `isEmpty` 方法,以及模拟结账时间的`checkoutTimeForCustomer`方法。在`main`函数中展示了如何使用这个队列进行顾客结账的模拟。