ArrayList(底层是数组):
查询、替换速度快;删除、新增慢;存储地址是连续的
LinkeList(底层是双向链表):
删除、新增速度快;查询、修改速度慢,存储地址是任意存放的
原因:
因为在查询,替换的时候,数组可以通过下标直接定位找到元素,而链表要一个一个查找过去。在删除,插入的时候,数组要一个一个的移位,而链表通过指针把节点指向新元素的内存块就可以
适用场景分析:
1、当数据访问多的情况下选用ArrayList
2、当数据删除频繁的情况下采用LinkedList
共同点:都是线程不安全的
注意:
线程不安全的集合也可以使Collections工具类把它们包装成线程安全的集合,
如:List<> synArrayList = Collections.synchronizedList(new ArrayList<>());