贝利信息

在Java里如何实现简单的仓库管理系统_Java对象与集合说明

日期:2026-01-19 00:00 / 作者:P粉602998670
ArrayList比数组更灵活,能自动伸缩并配合泛型约束类型;Product需重写equals()和hashCode()、添加唯一id字段;高频查询应补HashMap索引;增删改操作须封装校验逻辑、考虑线程安全;JSON序列化LocalDateTime需注册JavaTimeModule;持久化推荐Jackson写JSON而非手写CSV或二进制;数据量大时应升级为嵌入式数据库。

用 ArrayList 存商品对象比用数组更灵活

数组长度固定,新增商品要扩容、删除要移动元素,实际开发中几乎不用;ArrayList 能自动伸缩,配合泛型还能约束只能存 Product 类型。关键不是“能存”,而是“怎么让每个商品有唯一标识、可查、可改”。

增删改查操作别直接裸调集合方法

用户界面或业务逻辑层不该直接调 products.add(p)products.removeIf(...),容易漏校验、难统一处理异常。应该封装成带语义的方法:

public class Warehouse {
    private final List products = new ArrayList<>();

    public boolean addProduct(Product p) {
        if (p == null || p.getName().trim().isEmpty()) return false;
        if (products.stream().anyMatch(existing -> existing.getId().equals(p.getId()))) {
            return false; // 重复 ID 拒绝入库
        }
        return products.add(p);
    }

    public Product getProductById(String id) {
        return products.stream()
                .filter(p -> p.getId().equals(id))
                .findFirst()
                .orElse(null);
    }
}

JSON 序列化时 LocalDateTime 会报错

如果 Product 里有 LocalDateTime createTime,用 Jackson 直接 ObjectMapper.writeValueAsString(list) 会抛 JsonMappingException:Java 8 时间类型默认不支持。

持久化到文件别手写 CSV 或拼字符串

FileOutputStream + ObjectOutputStream 写二进制虽然快,但换 JDK 版本或改 Product 字段就会反序列化失败;手写 CSV 容易被逗号、换行搞崩。

立即学习“Java免费学习笔记(深入)”;

实际跑起来才发现,最难的不是写 add()remove(),而是想清楚“什么算合法的商品状态”“谁有权改库存”“断电后数据还在不在”。这些不在集合里,但在每一行 if 判断和每一份 JSON 备份里。