数组(ArrayList)由于是紧凑连续存储,可以随机访问,通过索引快速找到对应元素,?且相对节约存储空间。但正因为连续存储,内存空间必须?次性分配够,
所以说数组如果要扩容,需要重新分配?块更?的空间,再把数据全部复制过去,时间复杂度 O(N);?且你如果想在数组中间进?插?和删除,
每次必须搬移后?的所有数据以保持连续,时间复杂度 O(N)。
优点:随机查询快、在尾部添加比链表快
缺点:随机插入、删除相比链表慢
链表(LinkedList)因为元素不连续,?是靠指针指向下?个元素的位置,所以不存在数组的扩容问题;如果知道某?元素的前驱和后驱,操作指针即可删除该元素
或者插?新元素,时间复杂度 O(1)。但是正因为存储空间不连续,你?法根据?个索引算出对应元素的地址,所以不能随机访问;?且由于每个元素
必须存储指向前后元素位置的指针,会消耗相对更多的储存空间。
优点:随机插入、删除快 比数组
缺点:查询慢 相比数组
相同点:两者都是线性表。而且是线程不安全的。Vector 向量 线程安全。 Vector 也是基于数组实现的。
数组和链表
原文:https://www.cnblogs.com/controller666/p/14513901.html