Array List
Array List的底层原理
-
底层是数组:
ArrayList
是对数组进行了封装,底层就是数组。这使得它具有数组的优点和缺点。 -
默认初始化容量为10:在第一次创建集合并添加第一个元素时,在底层会创建一个默认长度为10的数组。当元素个数超过当前数组长度时,会触发扩容操作。
-
扩容机制:扩容时,会创建一个新的数组,长度通常是旧数组的1.5倍(即原容量的1.5倍),然后将原数组中的元素复制到新数组中。这种方式可以避免每次添加新元素都需要进行数组的扩容操作,提高了性能。
查询快
ArrayList
通过索引来直接访问元素,因为底层是数组,所以查询速度非常快,时间复杂度为O(1)。
增删慢
由于底层是数组,所以在插入或删除元素时,需要将插入点后的所有元素向后移动,这会导致较高的时间复杂度,特别是在数组的中间或开头插入或删除元素时。
线程不安全
ArrayList
是线程不安全的,这是因为其底层数组的非同步特性。在多线程环境下使用时,需要通过外部同步手段来保证线程安全性。
Linked List
Linked List的底层原理
-
双向链表结构:
LinkedList
的底层是双向链表结构,每个节点对象除了包含指向下一个节点的引用(next
)外,还包含指向前一个