教科书上的内容
对于数组,随机元素访问的时间复杂度是 O(1),元素插入操作是 O(n);
对于链表,随机元素访问的时间复杂度是 O(n),元素插入操作是 O(1)。
由此可见在随机插入中应该会使用LinkedList ,但在实际中并不是这样。
在大多数场景中ArrayList 在各种性能下都远胜LinkedList ,可以自行测试。
这里只说明为什么不用。
不能只考虑算法
在LinkedList 中,在实现的时候,我们需要先通过循环获取到那个节点的 Node,然后再执行插入操作。前者也是有开销的,不可能只考虑插入操作本身的代价。
抛开算法层面不谈,由于 CPU 缓存、内存连续性等问题,链表这种数据结构的实现方式对性能并不友好,即使在它最擅长的场景都不一定可以发挥威力。