lists or List :
| Array | Dynamic Array | Array Deque | Singly Linked List | Double Linked List |
| Push (Front) | - | O(n) | O(1) | O(1) | O(1) |
| Pop (Front) | - | O(n) | O(1) | O(1) | O(1) |
| Push (Back) | - | O(1) | O(1) | O(n), maybe O(1)* | O(1) |
| Pop (Back) | - | O(1) | O(1) | O(n) | O(1) |
| Insert before (given iterator) | - | O(n) | O(n) | O(n) | O(1) |
| Delete (given iterator) | | O(n) | O(n) | O(n) | O(1) |
| Insert after (given iterator) | | O(n) | O(n) | O(1) | O(1) |
| Delete after (given iterator) | - | O(n) | O(n) | O(1) | O(1) |
| Get nth element (random access) | O(1) | O(1) | O(1) | O(n) | O(n) |
| Good for implementing stacks | no | yes (back is top) | yes | yes (front is top) | yes |
| Good for implementing queues | no | no | yes | maybe* | yes |
| C++ STL | std::array | std::vector | std::deque | std::forward_list | std::list |
| Java Collections | java.util.Array | java.util.ArrayList | java.util.ArrayDeque | - | java.util.LinkedList |
* singly-linked lists can push to the back in O(1) with the modification that you keep a pointer to the last node
Associative containers (sets, associative arrays):
| Sorted Array | Sorted Linked List | Self-balancing Binary Search Tree | Hash Table |
| Find key | O(log n) | O(n) | O(log n) | O(1) average O(n) worst |
| Insert element | O(n) | O(n) | O(log n) | O(1) average O(n) worst |
| Erase key | O(n) | O(n) | O(log n) | O(1) average O(n) worst |
| Erase element (given iterator) | O(n) | O(1) | O(1) | O(1) |
| Can traverse in sorted order? | yes | yes | yes | no |
| Needs | comparison function | comparison function | comparison function | hash function |
| C++ STL | - | - | std::set
std::map
std::multiset
std::multimap
| __gnu_cxx::hash_set
__gnu_cxx::hash_map
__gnu_cxx::hash_multiset
__gnu_cxx::hash_multimap
|
| Java Collections | - | - | java.util.TreeSet
java.util.TreeMap
| java.util.HashSet
java.util.HashMap
|
| Binary Search | AVL Tree | Binary Heap (min) | Binomial Queue (min) |
| Insert element | O(log n) | O(log n) | O(log n) | O(1) (on average) |
| Erase element | O(log n) | O(log n) | unavailable | unavailable |
| Delete min element | O(log n) | O(log n) | O(log n) | O(log n) |
| Find min element | O(log n) | O(log n) | O(1) | O(log n) (can be O(1) if ptr to smallest) |
| Increase key | unavailable | unavailable | O(log n) | O(log n) |
| Decrease key | unavailable | unavailable | O(log n) | O(log n) |
| Find | O(log n) | O(log n) | unavailable | unavailable |
| Delete element | O(log n) | O(log n) | unavailable | unavailable |
| Create | O(1) | O(1) | O(1) | O(1) |
| find kth smallest | O(log n) | O(log n) | O((k-1)*log n) | O(k*log n) |
Hash table:
| Hash table (hash map) |
| Set Value | Ω(1), O(n) |
| Get Value | Ω(1), O(n) |
| Remove | Ω(1), O(n)
|