每一个线性表上的数据最多只有前和后两个方向。数组、链表、队列、栈都是线性表。
与此对应,非线性表指数据之间不是简单的先后关系。好比:二叉树、堆、图等。数组
数组有连续的内存空间和相同类型的数据,这两个特性可使其“随机访问”。性能
纠正知识点:数组和链表的区别
链表适合插入、删除,时间复杂度 O (1);数组适合查找,即使是排好序的数组,用二分查找,时间复杂度也是 O (logn)。因此,正确的表述应该是:数组支持随机访问,根据下标随机访问的时间复杂度为 O (1)。队列
Java 中的 ArrayList、C++ STL 中的 vector均是优秀的容器。内存
ArrayList优点:开发
扩容操做耗时,最好建立ArrayList的时候事先指定数据大小。容器
选用ArrayList和数组的区别:
1.Java ArrayList 没法存储基本类型,好比 int、long,须要封装为 Integer、Long 类,而 Autoboxing、Unboxing 则有必定的性能消耗,因此若是特别关注性能,或者但愿使用基本类型,就能够选用数组。List
若是数据大小事先已知,而且对数据的操做很是简单,用不到 ArrayList 提供的大部分方法,也能够直接使用数组。二叉树
当要表示多维数组时,用数组每每会更加直观。好比 Object [][] array;而用容器的话则须要这样定义:ArrayList
通常业务开发选择容器就足够了,省时省力。通常影响不到总体性能。链表
数组从0开始编号: 1.偏移地址,0表明偏移量为0。 2.历史遗留问题。