链表(LinkedList对象)是另一种流行的集合类型。
链表用于模拟栈或队列结构,它们是顺序存储,其中的元素主要从一端或两端添加和删除。
考虑一个分销商模型,该模型维护着来自零售商的订单积压。假设有一个Order类,其中包含一个amount字段。积压订单(本质上是一个FIFO队列)可以通过以下代码创建:
LinkedList<Order> backlog = new LinkedList<Order>();
函数
LinkedList对象支持所有集合通用的函数(如size()或isEmpty()),并且还提供自己的API。
以下函数与上述示例相关,该示例中的Order对象构成链表的元素。要在您自己的链表中使用它们,请指定适当的对象类型。
函数 | 描述 |
---|---|
Order getFirst() | 返回列表中的第一个元素。 |
Order getLast() | 返回列表中的最后一个元素。 |
addFirst(Order o) | 在列表的开头插入指定的元素。 o — 要插入的元素。 |
addLast(Order o) | 将指定的元素追加到列表的末尾。 o — 要追加的元素。 |
Order removeFirst() | 从列表中移除并返回第一个元素。 |
Order removeLast() | 从列表中移除并返回最后一个元素。 |
示例 假设分销商收到新订单时,会将其放置在积压订单的末尾:
backlog.addLast(order);
每次库存得到补充时,分销商都会尝试从积压订单的顶部开始发货。如果订单中的数量大于剩余库存,则订单处理停止。订单处理可能如下所示:
while(!backlog.isEmpty()) { // 在积压订单不为空的情况下重复以下代码
Order order = backlog.getFirst(); // 选择积压订单中的第一个订单
if(order.amount <= inventory) {// 如果有足够的库存来完成此订单
ship(order); // ship
inventory -= order.amount; // reduce available inventory // 从积压订单中移除已发货的订单
backlog.removeFirst(); // remove the order from the backlog
} else { // not enough inventory to ship // 如果库存不足以发货当前订单
break; // stop processing the order backlog// 停止处理订单积压
}
}