java集合的设计思路

我们在写java代码

实际上是在写什么

就是接收数据,处理数据。

对数据做应的逻辑处理,装到中间件里也好。处理也好。

是在创造装数据的容器,叫做变量。

我们是在学习,java。

前面的基础知道。我们写代码,

就是写一堆程序。

怎么设计装数据的容器。

基本数据类型,string,LocalDateTime,类,就够了嘛。

不够的。

如果数据是一个excel表格形式的,

如何把这一个表格里的数据,装到java内容里

这个时候,就创造了一个概念集合。

集合就是excel数据,在java中的化身

你的理解非常到位------Java 代码本质上就是 "接收数据 → 处理数据 → 输出/存储数据"

而如何 在内存中表达现实世界的表格数据 ,正是从基础变量走向 数据结构与设计思想 的关键一步。

一、Excel 表格在 Java 中的"自然映射"

假设 Excel 表格如下:

姓名 年龄 城市
张三 28 北京
李四 32 上海

你直觉上会想:

  • "一行" 是一个完整的数据单元 → Java 对象
  • "多行" 是多个数据单元 → 对象的集合
  • "列" 是对象的属性 → 基本类型 / 字符串 / 日期等
java 复制代码
// 1. 定义行的模板(类)
public class Person {
    private String name;
    private int age;
    private String city;

    // 构造方法、getter/setter ...
}

// 2. 把整个表格装进集合
List<Person> people = new ArrayList<>();
people.add(new Person("张三", 28, "北京"));
people.add(new Person("李四", 32, "上海"));

集合(如 List)就是 Excel 表格在 Java 内存中的化身。


二、为什么说"集合"是 Excel 的化身?

因为集合提供了表格所需的"核心能力":

Excel 操作 Java 集合对应
一张表 List<Person>Set<Person>
一行 一个 Person 对象
一列 对象的同一个属性(如 name
按行号访问 list.get(行索引)
筛选 stream().filter(...)
新增行 list.add(...)
删除行 list.remove(...)
排序 Collections.sort(...)Comparator

没有集合 :你得用多个单独的变量 → person1, person2... 没法统一操作。
有了集合:表格的"整体感"就在内存中被还原了。


三、但这还不够------什么时候需要更复杂的设计?

你提到的"基本类型、String、LocalDateTime、类"确实常用,但遇到以下情况,就要升级容器设计:

1. 列名也是数据(动态列)

Excel 列不确定,比如第一行是"参数1、参数2、参数3"

→ 用 Map<String, Object> 表示一行,List<Map<String, Object>> 表示整个表。

2. 表格之间存在引用关系

订单表 + 商品表 + 用户表

→ 用 Map<订单ID, 订单对象>,订单对象里包含 List<商品>用户ID

3. 海量数据(内存装不下)

Excel 有 100 万行

→ 不能简单用 List<Person>,会 OOM。

→ 改用 游标式读取 + 逐行处理 ,或 数据库 + ORM(如 MyBatis),集合只是处理窗口。

4. 需要多维表格 / 分组

比如"按城市分组,再按年龄分组"

Map<String, Map<Integer, List<Person>>>

→ 或者用 StreamCollectors.groupingBy


四、从"装数据的容器"到"数据的设计模式"

你正在无意中触达一个核心能力:数据建模

写 Java 代码 → 设计变量 → 设计类 → 设计集合 → 设计数据在内存中的流动与存储形态

场景 容器选择
单个实体 对象 (Person p)
列表(有顺序) List<T>
去重 / 集合运算 Set<T>
快速按 key 查找 Map<K,V>
栈 / 队列 Deque
一行数据,列名不固定 Map<String, Object>
一对多关联 Map<Key, List<Value>>

相关推荐
源码之家2 小时前
计算机毕业设计:Python股票交易管理可视化系统 Django框架 requests爬虫 数据分析 可视化 大数据 大模型(建议收藏)✅
爬虫·python·深度学习·信息可视化·数据分析·django·课程设计
jiayong232 小时前
第 33 课:任务看板视图(按状态分列)与本地持久化
开发语言·前端·javascript·学习
SunnyDays10112 小时前
使用 Python 高效提取 Word 文档的特定页 (连续页、不连续页、按页拆分)
python·提取 word 文档页面·拆分 word 文档
2401_883600252 小时前
Cgo 回调中处理 const char- 参数的正确方法
jvm·数据库·python
A_aspectJ2 小时前
【Java基础开发】 基于Swing GUI 组件实现图书管理系统
java·开发语言
gmaajt2 小时前
CSS 背景图片无法加载的常见原因与正确写法详解
jvm·数据库·python
陌殇殇2 小时前
004 Spring AI Alibaba框架整合百炼大模型平台 — MCP服务
java·spring·ai
014-code2 小时前
JUC 常用工具类:CountDownLatch、CyclicBarrier、Semaphore
java
宇宙realman_9992 小时前
DSP28335-FlashAPI使用
linux·前端·python