如果对于以下操作,我们都希望是O(1)的时间复杂度,如何实现:
- Insert the key
- Get the key / Check if the key exists
- Delete the key
- Return the first / or the last added key/value
前三种方式可以用HashMap来实现,第四种方式可以用LinkedList来实现。
在Java中,有个类型叫LinkedHashMap,相当于HashMap + LinkedList
。LinkedHashMap 继承了 HashMap,同时能够做到按照插入顺序或者访问顺序进行迭代。
LinkedHashMap有两种排序方式:insertion-ordered 或者 access-order。默认是 insertion-ordered。唯一使用 access-order 的构造方式是:
public LinkedHashMap(int initialCapacity, // 初始大小
float loadFactor, // 加载因子
boolean accessOrder) // 排序方式
涉及到的题目:
340 Longest Substring with At Most K Distinct Characters
https://leetcode.com/problems/longest-substring-with-at-most-k-distinct-characters/
146 LRU Cache
https://leetcode.com/problems/lru-cache/