原创 HashMap源碼分析

HashMap實現原理 HashMap的底層數據結構是數組+鏈表的形式。數組是HashMap的主體,鏈表則主要是爲了解決哈希衝突而存在的,如果定位到數組位置不含鏈表(當前entry的next指向null),那麼對於查找,添加等操作

原创 HashTable和HashMap對比

HashTable和HashMap區別: 遍歷方式比HashMap多一種 HashTable父類 Dictionary HashMap 父類 abstractMap和Map hashtable初始化大小是11,而hashmap

原创 排序算法之冒泡排序(一)

冒泡排序是最常使用的一種排序算法,算法思想是從頭到尾遍歷數組,將相鄰的兩個值進行比較,小的放在前面,大的放在後面。 這樣第一趟排序之後,最後一個位置所放的元素就是最大的值,第二趟排序之後,倒數第二個元素也排好了。經過n次排序之後,所有的值

原创 排序算法之插入排序(三)

插入排序:把n個待排序的元素看成爲一個有序表和一個無序表。開始時有序表中只包含1個元素,無序表中包含有n-1個元素,排序過程中每次從無序表中取出第一個元素,將它插入到有序表中的適當位置,使之成爲新的有序表,重複n-1次可完成排序過程。 例

原创 棧的順序存儲結構

棧的定義(後進先出LIFO) 棧(stack)是限定僅在表尾進行插入和刪除操作的線性表。 我們把允許插入和刪除的一端叫做棧頂,另一端叫做棧底。不含元素的棧叫做空棧。元素插入叫入棧,刪除叫出棧。 棧的順序存儲結構 棧是線性表的

原创 排序算法之快速排序(五)

快速排序:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行。 例如:4,3,1,2,6,5, 1.剛開始定義兩個變量i

原创 排序算法之希爾排序(四)

希爾排序:希爾排序是插入排序的優化算法,算法思想:通過將全部元素分爲幾個區域來提升插入排序的性能。先將步長設爲數組的一半,將分好的區域進行插入排序,之後步長gap每次等於他的一半,即gap /= 2。當步長爲1時,就是普通的插入排序,但是

原创 leetCode442數組中重複的數據

題目:給定一個整數數組 a,其中1 ≤ a[i] ≤ n (n爲數組長度), 其中有些元素出現兩次而其他元素出現一次。 找到所有出現兩次的元素。 你可以不用到任何額外空間並在O(n)時間複雜度內解決這個問題嗎? 思路:先給數組元素排序,然

原创 排序算法之選擇排序(二)

選擇排序:將數組分爲兩個區域,排好序的和未排序的區域,每一趟下來在未排序的區域中找到最小的放在最前面(也可以將最大的放在最後面),持續進行n趟之後,數組有序。 例如: 原數組     3,1,4,2,5 第一趟     1,3,4,2,5

原创 KMP算法

KMP算法:D.E.Knuth、J.H.Morris和V.R.Pratt三位前輩發表的一個模式匹配算法,可以避免重複遍歷的情況 普通的字符串匹配算法: 串S叫做主串,T是要匹配的串叫做模式串,每次從頭開始一位位比較,一旦發現