极客时间课程《数据结构与算法之美》笔记02 - 数组与容器

数组与容器

线性表

每一个线性表上的数据最多只有前和后两个方向。数组、链表、队列、栈都是线性表。
与此对应,非线性表指数据之间不是简单的先后关系。好比:二叉树、堆、图等。数组

数组有连续的内存空间和相同类型的数据,这两个特性可使其“随机访问”。性能

纠正知识点:数组和链表的区别
链表适合插入、删除,时间复杂度 O (1);数组适合查找,即使是排好序的数组,用二分查找,时间复杂度也是 O (logn)。因此,正确的表述应该是:数组支持随机访问,根据下标随机访问的时间复杂度为 O (1)。队列

容器与数组

Java 中的 ArrayList、C++ STL 中的 vector均是优秀的容器。内存

ArrayList优点:开发

  • 将不少数组操做细节封装
  • 支持动态扩容

扩容操做耗时,最好建立ArrayList的时候事先指定数据大小。容器

选用ArrayList和数组的区别:
1.Java ArrayList 没法存储基本类型,好比 int、long,须要封装为 Integer、Long 类,而 Autoboxing、Unboxing 则有必定的性能消耗,因此若是特别关注性能,或者但愿使用基本类型,就能够选用数组。List

  1. 若是数据大小事先已知,而且对数据的操做很是简单,用不到 ArrayList 提供的大部分方法,也能够直接使用数组。二叉树

  2. 当要表示多维数组时,用数组每每会更加直观。好比 Object [][] array;而用容器的话则须要这样定义:ArrayList array。 方法

通常业务开发选择容器就足够了,省时省力。通常影响不到总体性能。链表

数组从0开始编号: 1.偏移地址,0表明偏移量为0。 2.历史遗留问题。

相关文章
相关标签/搜索