使用arraylist存储商品、iterator遍历计算总价是简易购物车结算的常见方式,关键在于iterator遍历时的安全删除能力(iterator.remove())及灵活控制逻辑。

用 ArrayList 存商品,用 Iterator 遍历并计算总价,是实现简易购物车结算的常见方式。关键不是“只能用 Iterator”,而是理解它在遍历时的安全性和控制力——比如边遍历边移除商品时,Iterator 的 remove() 比直接调用 ArrayList 的 remove() 更安全。
定义商品类(Item)
先建一个基础的商品模型,包含名称、单价和数量:
public class Item {
private String name;
private double price;
private int quantity;
<pre class="brush:java;toolbar:false;">public Item(String name, double price, int quantity) {
this.name = name;
this.price = price;
this.quantity = quantity;
}
public double getTotalPrice() {
return price * quantity;
}
// getter 方法(略,实际需补全)
public String getName() { return name; }
public double getPrice() { return price; }
public int getQuantity() { return quantity; }}
用 ArrayList 存储购物车商品
购物车本质是一个商品列表,ArrayList 天然适合动态增删:
import java.util.*;
<p>List<item> cart = new ArrayList();
cart.add(new Item("Java 编程思想", 99.0, 1));
cart.add(new Item("算法图解", 65.0, 2));
cart.add(new Item("笔记本", 12.5, 3));</item></p>用 Iterator 遍历并结算总价
Iterator 提供统一遍历接口,适合需要逐个处理、可能中途跳过或删除的场景:
- 用
cart.iterator()获取迭代器 - 用
hasNext()判断是否还有元素 - 用
next()取出当前商品,累加getTotalPrice() - 若需移除某商品(如库存不足),调用
iterator.remove()—— 这是唯一安全的遍历中删除方式
double total = 0.0;
Iterator<item> it = cart.iterator();
while (it.hasNext()) {
Item item = it.next();
total += item.getTotalPrice();
// 示例:单价超 80 元的商品打 9 折(可选逻辑)
if (item.getPrice() > 80.0) {
System.out.println("✓ " + item.getName() + " 已享折扣");
}
}
System.out.println("应付总额:" + total);
</item>补充:更实用的结算方法封装
把结算逻辑抽成方法,支持传入折扣率或过滤条件,提升复用性:
public static double calculateTotal(List<item> items, double discountRate) {
double sum = 0.0;
Iterator<item> it = items.iterator();
while (it.hasNext()) {
Item item = it.next();
sum += item.getTotalPrice() * (1 - discountRate);
}
return Math.round(sum * 100.0) / 100.0; // 保留两位小数
}
<p>// 调用示例:全场 95 折
double finalAmount = calculateTotal(cart, 0.05);</p></item></item>Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











