都 2026 年了,为什么还要懂数据结构?
一个贯穿全章的隐喻:数据结构 = 收纳方式。亲手玩一局「找钥匙」,体会选错收纳有多慢;再看不懂结构的人怎么把 AI 写的慢代码直接上线
本页解决的问题
先给结论都 2026 年了,为什么还要懂数据结构?
一个贯穿全章的隐喻:数据结构 = 收纳方式。亲手玩一局「找钥匙」,体会选错收纳有多慢;再看不懂结构的人怎么把 AI 写的慢代码直接上线
让这个结论先证明自己值得留下。 把这一页当成决策工具,而不是需要背下来的定义。把概念连到一个真实任务、一个可观察结果,以及一个能改变你判断的失败上。
写下一个问题:试完这个方法后,你能用什么证据回答它?
结论听起来很完整,却没有检查最关键的假设。
同样 36 件杂物,左边一股脑塞进大抽屉,右边按类别放进了分格收纳盒。现在钥匙 🔑 不见了——点下面的按钮,看两边各要翻多少次才能找到。
🗄 一只大抽屉
什么都往里塞,找东西只能从头翻到尾
🗃 分格收纳盒
按类别分格:找钥匙?直接开「随身物品」那格
你可能会说:收纳是程序员的事,AI 替我写代码,它收纳去。问题是——AI 两种都可能写。同一句需求「查用户是否在会员名单里」,AI 给出的两个版本都能跑通、界面上看不出任何差别。拖动名单人数,看看差别藏在哪。
AI 的版本 A 大抽屉
AI 的版本 B 收纳盒
8 种收纳方式,每一种都不用背——因为它们全都藏在你已经学过的 AI 概念里。点卡片翻面,看看每种结构在 AI 世界里的真身。
从「找钥匙」到会员名单:结构如何改变结果
「同样 36 件杂物,左边一股脑塞进大抽屉,右边按类别放进了分格收纳盒。现在钥匙 🔑 不见了——点下面的按钮,看两边各要翻多少次才能找到」先把数据结构变成了一个可以观察的动作:同样的东西,放在一个大抽屉里只能逐个翻,放进分格盒则可以先定位类别。接着,会员名单实验把这个差别搬进了真实的软件操作——用户只关心“在不在名单里”,但程序要决定每次查询究竟要重复多少工作。
两个版本都能运行,为什么代价不一样
版本 A 每次都从名单开头检查,名单有多少人,最坏就要比较多少次;这是一种随数据量线性增长的查找。版本 B 先把名单放进 Set,再用 has 查询,建立 Set 本身需要一次整理,但在重复查询时通常可以用近似固定的时间定位。若只有一次查询、名单很小,线性扫描完全够用;当同一份名单被反复访问,预先组织数据的成本才会被摊薄。
验收类似代码时,先问三件事
- 这段代码最常执行的动作是什么:按位置读取、判断是否存在、插入新记录,还是遍历关系?
- 数据会从几十条增长到多少?要看平均耗时,也要看最坏情况和重复调用次数。
- 更快的结构带来了什么代价:额外内存、建立索引的时间、更新数据时的同步,以及是否仍然保持原来的顺序?
所以“懂数据结构”并不等于手写所有实现,而是能把「你可能会说:收纳是程序员的事,AI 替我写代码,它收纳去。问题是—— AI 两种都可能写 。同一句需求「查用户是否在会员名单里」,AI 给出的两个版本都能跑通、界面上看不出任何差别。拖动名单人数,看看差别藏在哪」追问到底:代码为什么这样组织,随着数据和调用方式变化,结果会不会改变。这个问题正是 AI 生成代码最需要人工判断的地方。
从「先玩一局 · 帮我找钥匙」走到「这和 AI 有什么关系」
「先玩一局 · 帮我找钥匙」先把问题落在「同样 36 件杂物,左边一股脑塞进大抽屉,右边按类别放进了分格收纳盒。现在钥匙 🔑 不见了——点下面的按钮,看两边各要翻多少次才能找到」上;到了「这和 AI 有什么关系」,讨论继续推进到「你可能会说:收纳是程序员的事,AI 替我写代码,它收纳去。问题是—— AI 两种都可能写 。同一句需求「查用户是否在会员名单里」,AI 给出的两个版本都能跑通、界面上看不出任何差别。拖动名单人数,看看差别藏在哪」。两段连起来,重点就不只是记住一个结论,而是看清它成立所依赖的条件。
把这条判断带到下一个场景
遇到一个新的数据结构时,不要从定义开始背。先写出最频繁的操作,再估计数据量和更新方式,最后检查结构是否让这三个条件同时成立。
- 「先玩一局 · 帮我找钥匙」:同样 36 件杂物,左边一股脑塞进大抽屉,右边按类别放进了分格收纳盒。现在钥匙 🔑 不见了——点下面的按钮,看两边各要翻多少次才能找到
- 「这和 AI 有什么关系」:你可能会说:收纳是程序员的事,AI 替我写代码,它收纳去。问题是—— AI 两种都可能写 。同一句需求「查用户是否在会员名单里」,AI 给出的两个版本都能跑通、界面上看不出任何差别。拖动名单人数,看看差别藏在哪
- 「最后的要点」:不用背定义 :8 种结构全在你学过的 AI 概念里,接下来逐个揭底
最后的「最后的要点」把讨论落到「不用背定义 :8 种结构全在你学过的 AI 概念里,接下来逐个揭底」。回看这条线索时,最值得保留的是:当输入、规模或风险改变,哪些判断需要重新做一遍。
✅ 这一课想和你分享的
- 数据结构 = 收纳方式:同样的数据,收纳不同,找起来差一个量级
- AI 两种都可能写:能跑通 ≠ 收纳对了,差别要到数据变多才爆发
- 你的角色是验收:不用会写,但要看得出「这里为什么用大抽屉」
- 不用背定义:8 种结构全在你学过的 AI 概念里,接下来逐个揭底
我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。
读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。
如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。
还没有这篇文章的讨论。