- Queue
- 繼承Collection接口,Deque、LinkedList、PriorityQueue、BlockingQueue
- 用於緩沖、並發訪問等場景
- Set
- 繼承Collection接口,HashSet(哈希表)、TreeSet(紅黑樹)
- 判斷重復元素調用hashCode()和equal()方法實現
- List
- ArrayList、LinkedList、Vector、Stack
- Map
- HashMap、ConcurrentHashMap
- Tree
- 紅黑樹
- 根是黑色的
- 葉子節點是黑色的空節點
- 紅色節點子節點是黑色的
- 包含相同數目的黑色節點
- TreeMap、TreeSet、HashMap
- 解決二叉查找樹會退化成線性結構的缺點
- B樹、B+樹、B*樹
- B+樹不維護關鍵字具體信息,不考慮Value的存儲,所有需要信息在葉子節點
- B*樹在非葉子節點兄弟之間增加指針,關鍵字個數至少為(2/3)* M
- LSM樹
- 大樹分成多個小樹
- HashMap HashTable區別
- HashTable方法同步,方法用synchronized修飾,多線程場合
- HashTable不允許null值
- 遍歷方式,HashTable使用Enumeration遍歷,HashMap使用Iterator遍歷
- 哈希值使用不同,HashTable直接使用hashCode
- hash數組大小默認11,HshTable增加為old*2 + 1,HashMap默認16,增加為2的指數倍
- HashTable線程安全,但是需要獲得對象鎖,一般使用CurrentHashMap
- HashTable競爭同一把鎖,ConcurrentHashMap分段加鎖
- HashMap Concurrent HashMap區別
- 非線程安全&線程安全
- 1.7ConcurrentHashMap對Hash桶分段segment(鎖),1.8Node數組+鏈表+紅黑樹,並發控制使用Synchronized和CAS來操作
- HashTable使用Synchronized保證線程安全,效率低
- ConcurrentHashMap鎖粒度更精細,並發性能好
- LinkedList ArrayList區別
- 雙向鏈表&Object數組
- 插入刪除&隨機查找
- 都是不同步的,不保證線程安全
- 內存空間占用,ArrayList在結尾預留容量空間,LinkedList每一個元素消耗更多的空間
- ArrayList Vector區別
- Vector類所有方法同步,ArrayList不是同步的
- HashMap實現
- 數組+鏈表,鏈表長度大於8時轉化為紅黑樹
- comparable和comparator區別
- comparable有一個compareTo(Object obj)方法用來排序
- comparator接口有一個compare(Object obj1,Object obj2)方法用來排序
- 數組排序用Arrays.sort(),集合排序用Collections.sort()
- 排序
- 快速排序
- 求解Kth Element問題
- 堆排序
- 求解TopK Element問題
- 桶排序
- 出現頻率最多的K個數
- 搜索
- 廣度優先
- 求解最短路徑問題
- 用隊列實現
- 標記遍歷過的節點
- 深度優先
- 求解可達性問題
- 使用遞歸棧實現
- 標記遍歷過的節點
- 回溯法(Backtracking)
- 求解排列組合問題
- 進入遞歸時標記為已訪問,遞歸返回時標記為未訪問
- 動態規划
- 0-1背包問題
- 完全背包:可重復利用