一 功能介绍
1.1 ArrayList
底层是基于数组,在内存中分配连续内存空间,非线程安全
长度大小的自管理: 采取延迟分配对象数组大小空间的,当第一次添加元素时才会分配10个对象空间(即ArrayList 默认长度为10),每次超过都按1.5倍扩容(内部实现:先复制新数组,再添加新元素到新数组内)
1.2 Vector (向量类)
动态数组的功能,不顾忌类型,不顾忌大小,也方便查找
底层也是基于数组实现的,线程安全
1.3 LinkedList
底层是基于双向链表实现的,在内存中分配的空间不是连续的,也非线程安全
二 ArrayList 和 LinkedList 的区别和用法
扫描二维码关注公众号,回复:
7755887 查看本文章
2.1 插入元素
LinkedList无论插入任何位置都一样,只需要创建一个新的表项节点和移动一下指针(前后两个表项的指针),性能消耗很低
ArrayList插入元素是默认追加到数组后面,但如果ArrayList指定位置插入元素,元素位置越靠前,需要重写排序的元素越多
结论:频繁插入删除元素,则使用LinkedList
2.2 按索引查询元素(get(i) )
链表需要遍历链表,根据位置对节点遍历查找 (如果下标位置在总长度中间之前,则从前往后遍历查找,否则从后往前遍历)
数组直接根据索引能查到元素
结论:ArrayList使用在查询比较多,但是插入和删除比较少的情况,而LinkedList用在查询比较少而插入删除比较多的情况