概述
LinkedList 是 Java 中的双向链表实现。
预备知识
双向链表:
每个节点除了包含存储的数据,还包含指向前一个节点和后一个节点的引用。这使得在双向链表中,可以从任意节点开始向前或向后遍历。
从计算机硬件的角度理解LinkedList 访问慢,但是插入删除快
访问慢:
1、内存跳转: 链表的节点不一定在内存中连续存储,访问每个节点都需要在内存中进行跳转,这会导致不断切换内存地址,增加访问的时间开销。
2、缓存不命中: 计算机内部有多级缓存,连续存储的数据可以更好地利用缓存。但链表的节点分布较为分散,这可能导致缓存不命中,需要频繁地从内存读取数据。
3、指针操作开销: 链表的每个节点都有指向下一个节点的指针,访问节点时需要进行指针的解引用操作,增加了访问开销。
插入,删除快
1、节点重组: 插入和删除操作只需要改变节点之间的引用关系,不需要像数组那样移动大量的数据。这使得插入和删除操作在链表中相对较快。
2 、无需移动数据: 对链表中的节点进行插入或删除操作时,只需要更新相邻节点的引用,不需要涉及数据的移动,这降低了插入和删除的开销。