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>>

相关推荐
拾-光4 分钟前
【Git】命令大全:从入门到高手,100 个最常用命令速查(2026 版)
java·大数据·人工智能·git·python·elasticsearch·设计模式
笨笨饿8 分钟前
74_SysTick滴答定时器中断
c语言·开发语言·人工智能·单片机·嵌入式硬件·算法·学习方法
无人不xiao13 分钟前
springBoot 实现 接口进度条
java·spring boot·后端
科芯创展24 分钟前
XZ4058B/C,20V,外置MOS,8.4V/8.7V开关充电芯片 宽范围电源电压:8.9V~20V-(电池充电电压:8.4V/8.7V)
c语言·开发语言
AI玫瑰助手31 分钟前
Python流程控制:break与continue语句的区别与应用
开发语言·python·信息可视化
棉猴32 分钟前
python海龟绘图之画布与窗口
javascript·python·html·setup·turtle·海龟绘图·screensize
小白学大数据34 分钟前
Python 爬虫爬取应用商店数据:请求构造与数据解析
前端·爬虫·python·数据分析
pkowner42 分钟前
若依分页问题及解决方法
java·前端·算法
2301_781571421 小时前
NumPy张量缩并怎么用_np.einsum()爱因斯坦求和约定高级索引魔法
jvm·数据库·python