ArrayList和LinkedList异同

房东的猫 提交于 2020-02-04 19:09:09

ArrayList和LinkedList异同

1、是否保证线程安全:ArrayList和LinkedList都不是同步的,当多个线程访问到同一个ArrayList集合时,如果有超过一个线程修改了ArrayList集合,则必须手动保证该集合的同步性;所以都不保证线程安全;
2、底层数据结构:ArrayList底层使用的是Object数组结构,LinkedList底层使用的是双向链表数据结构;
3、插入或删除元素是否受元素位置的影响:ArrayList是数组存储,所以在第i个位置插入或删除元素时,第i个位置之后的所有元素都会向后/前移动位置(牵一发而动全身);LinkedList使用的是双向链表存储,在第i个位置插入或删除元素时,只需要将i处位置的链表断开,插入/删除元素之后再将链表连接起来,即只需要改变链表指针的指向,不需要重组数组;
4、是否支持快速随机访问:ArrayList底层使用的是Object数组结构,数组有索引,所以可以通过元素索引快速方便的查找到数据;LinkedList底层使用的是双向链表数据结构,需要遍历到特定位置才能访问到特定元素,所以不支持高效的随机访问;
5、内存空间占用;ArrayList的数组结构主要是在数组结尾处会预留一定的空间;而LinkedList的双向链表数据结构,每一个元素都比ArrayList中元素占用的空间大,因为LinkedList中每个元素有数据部分和两个指针分别指向数据前驱和数据后继;
6、实现RandonAccess接口(接口中没有任何定义,但是实现该接口的类具有随机访问功能)的List,优先使用For循环,其次是Fpreach;没有实现RandonAccess接口的List,使用iterator循环遍历,大容量数据不要使用for循环;

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!