数组CRUD:读写O(1),末尾增删均摊O(1)、最坏O(n),中间增删O(n);链表:头尾增删O(1),查找及指定位置操作O(n);哈希表平均O(1)、最坏O(n)或O(log n);平衡BST稳定O(log n),支持有序遍历与范围查询。

数组(Array)的CRUD时间复杂度
数组是连续内存存储,支持通过下标随机访问。读(Read)操作为 O(1),直接用索引定位元素。写(Update)也是 O(1),前提是已知位置;若需先查找再更新,则查找本身耗时 O(n)。创建(Create)在末尾追加(如动态数组扩容后)均摊 O(1),但最坏情况(触发扩容并复制)为 O(n)。删除(Delete)若删末尾元素为 O(1);删中间或开头元素需移动后续所有元素,为 O(n)。插入同理:末尾插入均摊 O(1),指定位置插入为 O(n)。
链表(Linked List)的CRUD时间复杂度
单向链表中,读和写都必须从头遍历,最坏 O(n),无法跳转。创建在头部插入为 O(1),尾部插入若无尾指针则需遍历到末尾,为 O(n);双向链表可在头/尾均 O(1) 插入。删除同理:已知节点引用时(如迭代器指向),删除自身为 O(1);但要删指定值,仍需先查找,总代价 O(n)。链表优势在于频繁的头尾增删,劣势是缺乏随机访问能力。
哈希表(Hash Table)的CRUD时间复杂度
理想情况下(无严重哈希冲突、负载因子合理),读、写、创建(插入)、删除均为平均 O(1)。这是通过哈希函数将键映射到桶位置实现的。但最坏情况(所有键哈希到同一槽位,退化为链表或树)可能达 O(n)。现代实现(如Java HashMap)在链表过长时转红黑树,将最坏查找/删除控制在 O(log n)。注意:哈希表不保证顺序,也不支持按序遍历或范围查询。
二叉搜索树(BST)与平衡BST(如AVL、红黑树)
普通BST在数据有序插入时会退化为链表,此时读、写、删、插最坏均为 O(n)。而平衡BST通过旋转等机制维持高度约 log₂n,使全部 CRUD 操作稳定在 O(log n)。它支持有序遍历、范围查询(如“查所有 10–20 之间的键”),这是哈希表做不到的。插入和删除逻辑比哈希表复杂,但时间可预测,适合对最坏性能有要求的场景。

















