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