原创 Java多線程之線程創建與啓動

一、線程與進程 操作系統中可以支持多個程序同時運行,每個程序就代表了一個進程,各個程序即進程間相互獨立工作,而每個程序中可能包含多個順序執行流,每個執行流就代表了一個線程,各個線程共享進程中的資源。 1.什麼是進程 進程是系統進行

原创 數據結構之平衡二叉樹及Java實現

一、平衡二叉樹的基本介紹 平衡二叉樹是一棵空樹或它的左右兩個子樹的高度差的絕對值不超過1,並且左右兩個子樹都是一棵平衡二叉樹。構造與調整方法平衡二叉樹的常用算法有紅黑樹、AVL、Treap等。最小二叉平衡樹的節點的公式如下 F(n

原创 數據結構之紅黑樹及Java實現

一、紅黑樹的基本介紹 紅黑樹也是一種特殊的二叉查找樹,與平衡樹相似,它也是爲了解決普通二叉查找樹的檢索效率問題而設計的,紅黑樹的每個節點上都有存儲位表示節點的顏色,可以是紅(Red)或黑(Black)。紅黑樹並不是真正的平衡二叉樹

原创 排序算法之歸併排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、歸併排序的原理 歸併排序利用的是分治的思想實現的,對於給定的一組

原创 排序算法之桶排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、桶排序的原理 之前介紹的算法都是非線性時間比較類排序,而桶排序是

原创 排序算法之直接選擇排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、直接選擇排序的原理 選擇排序是一種簡單直觀的排序算法,它的工作原

原创 Java多線程之線程同步

線程安全問題 在單線程中不會出現線程安全問題,而多線程編程中,如果多個線程同時操作同一個資源,這種資源可以是各種類型的的資源:一個變量、一個對象、一個文件、一個數據庫表等,由於每個線程執行的過程是不可控的,比如兩個線程同時檢查某個

原创 Java基礎總結

Java基礎 面向對象的特性 封裝,將程序實現的細節隱藏起來,公開的方法顯示對象的功能。 繼承,子類繼承父類後,具有父類的功能和屬性,避免代碼重複。 多態,父類可以聲明子類,運行時依然保持子類的特徵。 Java與C++的區別

原创 排序算法之直接插入排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、直接插入排序的原理 插入排序通俗來講,就是在一組無序的數組中一個

原创 Java多線程之線程狀態轉換

一、線程生命週期的五種狀態 線程從創建、運行到結束總是處於下面五個狀態之一:新建狀態、就緒狀態、運行狀態、阻塞狀態及死亡狀態。 新建狀態(New):新創建了一個線程對象,Java虛擬機爲其分配內存。 就緒狀態(Runnable)

原创 排序算法之希爾排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、希爾排序的原理 希爾排序也是一種插入排序,它是簡單插入排序經過改

原创 數據結構之二叉查找樹及Java實現

一、二叉查找樹的介紹 二叉查找樹(Binary Search Tree),又被稱爲二叉搜索樹或二叉排序樹,是一種特殊的二叉樹,利用它可以很方便的對樹中節點進行排序和檢索。 二叉查找樹需要滿足以下的性質: 若它的左子樹不爲空,則

原创 排序算法之性能分析及總結

一、排序算法說明 排序的定義:對一個無序的序列進行排序的過程。 輸入:n個數:a1,a2,a3,…,an。 輸出:n個數的排列:a1,a2,a3,…,an,使得a1<=a2<=a3<=…<=an。 排序的穩定性:相同值的節點

原创 排序算法之冒泡排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、冒泡排序的原理 冒泡排序需要重複地走訪要排序的數列,一次比較兩個

原创 排序算法之堆排序及Java實現

一、排序算法的分類 選擇排序(直接選擇排序,堆排序) 交換排序(冒泡排序,快速排序) 插入排序(直接插入排序,希爾排序) 歸併排序 桶式排序 基數排序 二、堆排序的原理 堆排序是利用堆這種數據結構而設計的一種排序算法,堆