原创 Java容器之LinkedList源碼分析(LinkedList到底是單鏈表還是雙鏈表?)

  前面在分析ArrayList、Vector容器的源碼時,發現的底層實現原理都是維護一個數組,並且自動調整數組的大小(擴容、縮小),隨機查找效率高,但是插入、刪除操作效率低。在此篇博客中,博主將帶領各位小夥伴也看看LinkedL

原创 Java容器之ArrayDeque源碼分析(你知道ArrayDeque維護循環數組的原理嗎?)

  在上一篇博客 Java容器之LinkedList源碼分析(LinkedList到底是單鏈表還是雙鏈表?) 分析了LinkedList容器的源碼,LinkedList實現了Deque接口,所以它不但是一個List容器,而且還是

原创 Java容器之ArrayList源碼分析(這應該是Java中最簡單的容器吧)

  前面已經分析完Java的Map、Set容器源碼,還剩List相關的容器,此篇博客將分析List接口的實現類之一ArrayList容器的源碼實現。 註明:以下源碼分析都是基於jdk 1.8.0_221版本 Java容器之Arr

原创 Java容器之Vector源碼分析(Vector容器爲啥線程安全呢?)

  在上一篇博客 Java容器之ArrayList源碼分析(這應該是Java中最簡單的容器吧) 從源碼的角度分析了ArrayList容器,現在我們看下Vector容器又是什麼。 註明:以下源碼分析都是基於jdk 1.8.0_221

原创 Java容器之HashSet、LinkedHashSet、TreeSet源碼分析(不敢稱東半球最好,只稱東半球最好理解)

  前面分析了Java中的常見五大map容器,Java中的Set容器是對Map容器的封裝,今天就結合源碼分析一下Java中常見的三大Set容器。 註明:以下源碼分析都是基於jdk 1.8.0_221 溫馨提示:\color{re

原创 Java中的常見五種map容器源碼分析總結(HashMap、Hashtable、ConcurrentHashMap、LinkedHashMap、TreeMap)

  斷斷續續寫了半個月,今天終於把TreeMap容器中的紅黑樹搞定了,現在來水一篇又快又短的Java Map容器總結博客 😂😂。 註明:本篇博客不會涉及容器的源碼什麼的,主要是總結各個map容器的底層實現特點、主要運用場景。如果你

原创 Java容器之TreeMap源碼分析(附紅黑樹調整圖解,全網最詳細、圖解最全,不服來辯)

  在之前分析HashMap、ConcurrentHashMap容器的源碼實現時,反覆提及到JDK 1.8的版本中,HashMap、ConcurrentHashMap兩個容器都引入了紅黑樹來解決hash衝突問題(在之前的版本只有鏈

原创 數據結構之二叉搜索樹詳解(附C++代碼實現查找、插入、刪除操作)

  最近在分析分析紅黑樹時,感覺上來就挑最難的樹結構之一進行分析,難度太大,所以特意寫這篇二叉搜索樹分析的博客作爲鋪墊。那麼爲啥挑二叉搜索樹進行分析捏?其實紅黑樹也是一種更爲複雜的二叉搜索樹,建議閱讀一下我的另外一篇博客 數據結構

原创 數據結構之紅黑樹(還在爲看不懂紅黑樹而煩惱嗎?別再翻了,此篇足矣~)

  紅黑樹,非常經典的數據結構,主要用於一些容器中,比如C++語言中的map、Java語言中的TreeMap(後面會寫源碼分析博客)。紅黑樹能保持高效的查找,一般取時間複雜度爲O(log2n),由於高效,這個結構也比較複雜,所以很

原创 Java容器之LinkedHashMap源碼分析(看看確定不點進來?進來真不點?)

  前面幾篇博客Java容器之Hashtable源碼分析、Java容器之HashMap源碼分析分別分析了HashMap、Hashtable的源碼,此篇博客我們分析一下LinkedHashMap容器,看看它又有什麼花樣。 註明:以下

原创 Java容器之ConcurrentHashMap源碼分析(JDK 1.7與JDK 1.8對比)

  在前面兩篇博客 Java容器之HashMap源碼分析、Java容器之Hashtable源碼分析分別對JDK1.8中的HashMap、Hashtable的源碼進行一些分析,在本篇博客將對ConcurrentHashMap容器的源

原创 字符串匹配KMP算法詳解(這可能是東半球最好理解的解釋)

KMP算法是一種改進的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt提出的,因此人們稱它爲克努特—莫里斯—普拉特操作(簡稱KMP算法)。 累贅一下,KMP算法是字符串匹配算法,比如搜索字符串“abc

原创 劍指offer 鏈表中倒數第k個結點

題目描述 輸入一個鏈表,輸出該鏈表中倒數第k個結點。 解題思路:\color{blue}解題思路:解題思路: 由於這是單鏈表,只能往一個方向遍歷,因此第一想法可能是先遍歷一遍鏈表,計算一下鏈表節點的總個數n,再從頭開始走n - k

原创 劍指offer 剪繩子

題目描述 給你一根長度爲n的繩子,請把繩子剪成整數長的m段(m、n都是整數,n>1並且m>1),每段繩子的長度記爲k[0],k[1],…,k[m]。請問k[0]xk[1]x…xk[m]可能的最大乘積是多少?例如,當繩子的長度是8時

原创 劍指offer 二進制中1的個數

題目描述 輸入一個整數,輸出該數二進制表示中1的個數。其中負數用補碼錶示。 解題思路:\color{blue}解題思路:解題思路: 這道題有一個公式 n &= (n - 1),也就是計算n的二進制表示1的個數,只要循環使用上面的公