原创 ConcurrentHashMap在jdk1.8的詳解

源碼爲jdk1.8 Java7與Java8中的ConcurrentHashMap: 在ConcurrentHashMap中主要通過鎖分段技術實現上述目標。 在Java7中,ConcurrentHashMap由Segment數組結構

原创 單鏈表+環

1.鏈表的創建,(頭插,尾插,/任意位置插入) 2. 刪除單鏈表中所有值爲val的值; O(n)的時間 3. 得到表長度 4. 創建環: 5. 求環的入口點: 6. 求環的長度: 7. 判斷是否有環 8. **單鏈表的逆置?(使用頭

原创 排序-快速排序之隨機選取基準法

思想:基本的快速排序選取第一個或者最後一個元素作爲基準。這樣在數組已經有序的情況下,每次劃分將得到最壞的結果。一種比較常見的優化方法是隨機化算法,即隨機選取一個元素作爲基準。這種情況下雖然最壞情況仍然是O(n2),但最壞情況不再依賴於

原创 七大排序整理(選擇排序/直接插入排序/shell(希爾)排序/冒泡排序/快速排序/堆排/歸併排序)

選擇排序 :請看後文 直接插入排序 : 請看後文 shell排序 : 請看後文 冒泡排序 : 請看後文 快速排序 快速排序請點此鏈接 堆排 堆排請點此鏈接 歸併排序 歸併排序請

原创 排序-快速排序之三分取中法

思想:引入的原因:雖然隨機選取樞軸時,減少出現不好分割的機率,但是還是最壞情況下還是O(n^2),要緩解這種情況,就引入了三數取中選取樞軸 分析:最佳的劃分是將待排序的序列分成等長的子序列,最佳的狀態我們可以使用序列的中間的值,也就是

原创 排序-堆排序(heapSort)

時間複雜度:O(nlog₂n) 空間複雜度:O(1) 不穩定 把此序列對應的二維數組看成一個完全二叉樹。那麼堆的含義就是:完全二叉樹中任何一個非葉子節點的值均不大於(或不小於)其左,右孩子節點的值。 由上述性質可知大頂堆的堆頂的關鍵字

原创 排序-快速排序之固定位置選取基準法(遞歸/非遞歸)

快速排序 固定位置選取排序:數據越有序,複雜度越高 隨機選取基準排序 請點擊查看 三分取中法 請點擊查看 基於三分取中法的幾種優化 請點擊查看 快速排序(遞歸):好:0(nlog2n), 壞:O(n2).

原创 排序-快速排序的優化(三分取中法實現)

優化一:當待排列序列的長度分割到一定大小時,使用插入排序 原因:對於很小和部分有序的數組,快排不如插入排序好。當待排序序列的長度分割到一定大小後,繼續使用分割的效率比插入排序要差; 但是三分取中+插入排序還不能處理重複數組; 優化二:

原创 排序-歸併排序(二路歸併)

時間複雜度:O(nlog₂n) 空間複雜度:O(n) 穩定; 思路:歸併排序是建立在歸併操作上的一種有效的排序算法,是採用分治法的一個典型應用; 即先使每個子序列有序,再使子序列段間有序。若將兩個有序表合併成一個有序表,稱爲二路歸併

原创 抽象類,密封類和接口

一.抽象類: 1.抽象類介紹 抽象方法的類 abstract 關鍵字; 抽象方法由abstract修飾,類需要由 abstract修飾 抽象方法在抽象類內部不予以實現 抽象方法不能被private修飾,默認爲public的 abstr

原创 Java基本程序設計——基礎語法

1.數據類型 1.1數據類型分爲兩種:基本數據類型和引用數據類型 1.1—1 基本數據類型有8種:  四種整型(byte,int , short , long)  兩種浮點型(float,double)  一種字符型(char) 1

原创 一維數組的排序及二維數組

一維數組的排序及二維數組 一 . 數組的三個簡單排序: 1.冒泡排序: public static void bubbleSort(int[] array) { for(int i=0;i<array.length-1

原创 String的初步理解

關於String類的定義和使用 1. String str1 = new String("hello"); String str2 = "hello"; String str3 = "h

原创 java入門基礎

java入門基礎001 從helloworld開始 public class World{ public static void main(String[] args){ System.out.println("helloWorl

原创 String的應用及遞歸

1.String的應用 (1).字符串的左旋和右旋 public static String reverse0(String str,int begin,int end) { char[] ch = str.toCha