❒ List
✔ List是一个接口,它定义了各种操作列表的方法,如添加、删除、查找等。
✔ List本身不直接对应内存中的存储结构,而是通过其实现类(如ArrayList和LinkedList)来实现具体的存储方式。
❒ ArrayList
✔ ArrayList是基于动态数组实现的,
✔ 它的元素在内存中是连续存储的。
✔ 每个元素占用固定大小的内存空间,
✔ 当元素超出当前数组容量时,会进行扩容操作,通常是将当前数组的大小增加到原来的1.5倍。
✔ 默认尾插
❒ LinkedList
✔ LinkedList是基于双向链表实现的,
✔ 它的元素在内存中不是连续存储的。
✔ 每个元素通过指针连接到前一个和后一个元素,因此插入和删除操作不需要移动其他元素,只需改变指针的指向即可。
✔ 默认尾插
❒ 性能差异
✔ 查找:由于ArrayList的元素是连续存储的,可以通过索引直接访问,因此查找效率较高。而LinkedList需要通过遍历链表来查找元素,效率较低。
✔ 插入和删除:LinkedList在插入和删除操作上具有较高的效率,因为它只需要改变指针的指向,而不需要移动其他元素,在任何位置添加元素的时间复杂度均为O(1)。而ArrayList在列表末尾添加元素的时间复杂度为O(1),但在中间或头部添加元素的时间复杂度为O(n)。
✔ 内存占用:由于LinkedList的每个元素只需要存储数据和指针信息,而不需要像ArrayList那样预留连续的空间,因此LinkedList通常比ArrayList更节省内存。
✔ 综上所述,ArrayList和LinkedList在内存中的存储方式不同,这直接影响它们的性能特点和应用场景。