编程基础篇 · AI 背后的数据结构

都 2026 年了,为什么还要懂数据结构?

一个贯穿全章的隐喻:数据结构 = 收纳方式。亲手玩一局「找钥匙」,体会选错收纳有多慢;再看不懂结构的人怎么把 AI 写的慢代码直接上线

本页解决的问题

先给结论

都 2026 年了,为什么还要懂数据结构?

一个贯穿全章的隐喻:数据结构 = 收纳方式。亲手玩一局「找钥匙」,体会选错收纳有多慢;再看不懂结构的人怎么把 AI 写的慢代码直接上线

判断标准

让这个结论先证明自己值得留下。 把这一页当成决策工具,而不是需要背下来的定义。把概念连到一个真实任务、一个可观察结果,以及一个能改变你判断的失败上。

下一步

写下一个问题:试完这个方法后,你能用什么证据回答它?

常见误区

结论听起来很完整,却没有检查最关键的假设。

先玩一局 · 帮我找钥匙

同样 36 件杂物,左边一股脑塞进大抽屉,右边按类别放进了分格收纳盒。现在钥匙 🔑 不见了——点下面的按钮,看两边各要翻多少次才能找到。

🗄 一只大抽屉

什么都往里塞,找东西只能从头翻到尾

0次翻找

🗃 分格收纳盒

按类别分格:找钥匙?直接开「随身物品」那格

0次翻找
两边同时开找,翻找次数实时计数
同样的东西,收纳方式不同,找起来差了一个量级。这就是数据结构的全部秘密:数据结构 = 数据的收纳方式。大抽屉就是「数组里挨个找」,收纳盒就是「先分类再直达」。东西越多,差距越悬殊——36 件是翻 20 次和 3 次的区别,36 万件就是「等一下」和「瞬间」的区别。记住这个隐喻,全章 8 种结构都是不同的收纳方式。
这和 AI 有什么关系?

你可能会说:收纳是程序员的事,AI 替我写代码,它收纳去。问题是——AI 两种都可能写。同一句需求「查用户是否在会员名单里」,AI 给出的两个版本都能跑通、界面上看不出任何差别。拖动名单人数,看看差别藏在哪。

1,000 人
AI 的版本 A 大抽屉
for (const m of members) { if (m === user) return true; } // 从头翻到尾
每次查询约0.01 毫秒
AI 的版本 B 收纳盒
const set = new Set(members); return set.has(user); // 直达,不用翻
每次查询约0.0001 毫秒
这就是「验收」的含义。Demo 阶段名单只有 100 人,两个版本都是「瞬间」;上线半年名单涨到 100 万,版本 A 的页面开始卡成幻灯片——而写下它的 AI 早就不在对话里了。懂收纳方式的人,在合并代码那天就会问一句:「这里为什么用数组挨个找?」这一问,价值就出来了。
这一章你会拿到什么

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 概念里,接下来逐个揭底
标记为已学完 阅读进度会自动记录
← 上一篇下一篇 →

继续阅读

同一条线上的下一篇。

文章讨论

读到这里,留下一个判断。

把刚想明白的地方、还没想通的问题,留给下一位一起学习的人。

正在讨论 都 2026 年了,为什么还要懂数据结构? AI 背后的数据结构
3条讨论文章讨论 · 与共学社区同步
在共学社区查看
AM
Asha Morgan内容编辑
观点实践记录

我把这篇文章里的一个判断改写成了今天可以验证的小实验。比记住结论更有用的是,知道下一步要观察什么。

文章讨论7 有帮助
LH
Lin Harper独立开发者
观点观点

读完以后我先回头找它成立的条件,而不是直接把方法搬进项目。这个顺序让后面的取舍清楚很多。

文章讨论5 有帮助
KM
Kiki Moore产品运营
问题问题

如果把这个判断放到真实工作里,最先需要补的约束是什么?我想知道从阅读到第一次实践之间,哪一步最值得先做。

文章讨论4 有帮助