However, neither are completely efficient for some common usage patterns. Lists waste access time and memory to make updating easy. Arrays provide excellent access time and compact storage while making random insertion and deletion hideously expensive. The spike in a process's working set during the copy can hurt performance and increase a process's internal memory fragmentation. Array allocation requires a large block of contiguous memory which may be expensive to acquire on garbage collection systems, or in a traditional heap-based model with large amounts of internal memory fragmentation.
Lists waste one pointer's worth of memory per element.
This overhead becomes more significant on 64bit OS's. Doubly linked lists fix that problem, while sacrificing another pointer for every element. Modern computing needs a better data storage structure with the same level of flexibility and power at more reasonable costs. Quick access to nearby elements in the data structure, specifically for any iterating process like looping. Reasonably low memory overhead.