Java方法入門:定義、調用與參數傳遞,看完就會

本文介紹Java方法的入門知識,包括定義、調用與參數傳遞。方法是封裝重複代碼的工具,可提高複用性。 定義格式:`修飾符 返回值類型 方法名(參數列表) { 方法體; return 返回值; }`。示例:無參無返回值的`printHello()`方法(打印信息),有參有返回值的`add(int a, int b)`方法(計算兩數之和)。 調用方式:靜態方法可直接`類名.方法名(實參)`,非靜態需對象調用。如調用`printHello()`或`add(3,5)`。 參數傳遞:基本類型爲“值傳遞”,形參修改不影響實參。如`changeNum(x)`中,形參`num`修改不改變原變量`x`的值。 總結:方法提升代碼複用,掌握定義、調用和值傳遞是核心。 (注:全文約280字,涵蓋核心概念與示例,簡潔說明Java方法入門要點。)

閱讀全文
Java數組基礎:定義、初始化與遍歷,快速上手

Java數組是存儲相同類型數據的基礎結構,通過索引(從0開始)快速訪問元素。定義需先聲明(格式:數據類型[] 數組名)並初始化:動態初始化(new 數據類型[長度],後賦值,如int[] arr = new int[5]);靜態初始化(直接賦值元素,如int[] arr = {1,2,3},長度自動推斷,不可同時指定長度)。 遍歷數組有兩種方式:for循環(通過索引訪問,需注意索引範圍0~length-1,避免越界)和增強for循環(無需索引,直接取元素,如for(int num : arr))。 注意事項:元素類型必須一致;索引從0開始;長度不可變;未初始化數組不可直接使用,否則報空指針異常。熟練掌握數組操作對處理批量數據至關重要。

閱讀全文
Java循環結構for循環:重複操作的簡單實現,初學者必學

這篇文章介紹了Java中for循環的相關知識。首先指出編程中需重複執行代碼時,循環結構可簡化操作,避免繁瑣重複。for循環是最基礎常用的循環,適合已知循環次數的場景,其語法由初始化、條件判斷、迭代更新三部分構成,通過這三部分控制循環執行。 文中以打印1到5爲例,展示了for循環的執行過程:初始化i=1,條件i<=5,迭代i++,循環體打印當前數字,直至i=6時條件不成立結束。還列舉經典應用,如計算1到100的和(sum累加)、求5的階乘(factorial乘積)。 最後強調避免死循環的關鍵:確保條件判斷和迭代更新正確,防止循環變量不更新或條件永遠成立。掌握for循環能高效處理重複操作,爲後續學習複雜循環打下基礎。

閱讀全文
Java條件語句if-else:輕鬆掌握分支邏輯,附實例

Java條件語句(if-else)用於分支邏輯,根據條件判斷執行不同代碼塊,替代固定順序執行,應對複雜場景。 基礎結構:單分支`if`(條件成立執行代碼塊)、雙分支`if-else`(條件成立/不成立分執行塊)、多分支`if-else if-else`(多條件按順序判斷,else可處理剩餘情況)。 關鍵注意:條件表達式需用`==`比較(勿用賦值`=`);多分支注意條件範圍順序(如分數判斷先寬後窄,避免覆蓋);代碼塊必須用大括號包裹,避免邏輯錯誤。進階可嵌套if實現複雜判斷。掌握這些基礎,可靈活處理多數分支場景。 (字數:240)

閱讀全文
Java數據類型詳解:int、String、boolean基礎用法

這篇文章介紹了Java三種基礎數據類型:`int`、`boolean`和`String`。 `int`是基本整數類型,佔4字節,取值範圍爲-2147483648至2147483647,用於存儲無小數的整數(如年齡、分數),聲明賦值需用`int`關鍵字(如`int age=18`),僅支持整數,賦值小數會報錯,且數值超出範圍會溢出。 `boolean`爲基本邏輯類型,僅含`true`(真)和`false`(假),用於條件判斷,聲明賦值時只能使用這兩個值(如`boolean isPass=true`),不可用1/0代替,常配合`if`/`while`控制流程。 `String`是引用類型,用於存儲文本,需用雙引號包裹(如`String name="張三"`),本質是`java.lang.String`類的實例,內容不可直接修改(需重新賦值),支持`+`號拼接,可通過`length()`等方法處理文本。 三者是Java編程基礎,分別處理整數、邏輯判斷和文本

閱讀全文
Java變量入門:從定義到使用,零基礎也能懂!

這篇文章介紹了Java中變量的概念及使用。變量是存儲數據的“數據存錢罐”,能隨時修改內容,避免重複輸入數據。定義變量需三部分:類型(如int存整數、String存文字)、變量名(推薦駝峯命名法,如studentAge)、初始值(建議定義時賦值,避免空值)。 命名規則:不可用Java關鍵字,不能以數字開頭,只能含字母、下劃線、$等,且同一作用域內不能重複。使用時可通過打印(System.out.println)查看值,或直接賦值修改(如score=92)。 變量是Java基礎數據容器,核心要點:定義需類型+名+值,命名規範清晰,使用靈活。理解後可構建複雜功能,適合初學者掌握基礎數據存儲方式。

閱讀全文
堆排序:堆排序如何實現?時間複雜度詳解

堆排序是利用“堆”(特殊完全二叉樹)實現的排序算法,常用大頂堆(父節點≥子節點)。核心思想是“先建堆,再排序”:先將數組轉爲大頂堆(堆頂爲最大值),再反覆交換堆頂與末尾元素,調整剩餘元素爲堆,完成排序。 堆的基本概念:完全二叉樹結構,數組中索引i的左子節點2i+1、右子節點2i+2、父節點(i-1)//2。大頂堆父≥子,小頂堆父≤子。 實現分兩步:1.構建大頂堆:從最後非葉子節點開始,通過“堆化”(比較父與子節點,交換最大值並遞歸調整子樹)確保大頂堆性質;2.排序:交換堆頂與未排序末尾元素,縮小堆規模後重復堆化,直至完成。 時間複雜度:構建堆O(n),排序過程O(n log n),總O(n log n),空間複雜度O(1)(原地排序)。特點是不穩定,適合大規模數據排序。

閱讀全文
鄰接表:圖的高效存儲方式,比鄰接矩陣好在哪?

這篇文章介紹了圖的基本概念及兩種核心存儲方式:鄰接矩陣與鄰接表。圖由頂點(如社交網絡用戶)和邊(如好友關係)構成。 鄰接矩陣是二維數組,用0/1表示頂點間是否有邊,空間需n²(n爲頂點數),查找邊時間O(1),但稀疏圖(邊少)時空間浪費大。鄰接表則爲每個頂點維護鄰居列表(如用戶好友列表),空間n+e(e爲邊數),僅存實際邊,查找需遍歷鄰居表(時間O(degree(i)),i爲頂點),遍歷鄰居更高效。 對比顯示,鄰接表在稀疏圖(多數實際場景)中空間和時間效率均優於鄰接矩陣,是處理圖問題(如最短路徑)的主流存儲方式,更省空間且遍歷更快。

閱讀全文
動態規劃的狀態轉移:從問題到狀態轉移方程的過程

動態規劃通過拆分問題、存儲中間結果避免重複計算,適用於有重疊子問題和最優子結構的場景。其核心是“狀態轉移”,即不同階段狀態間的推導關係。以爬樓梯爲例:定義`dp[i]`爲爬到第`i`級臺階的方法數,轉移方程爲`dp[i] = dp[i-1] + dp[i-2]`,初始條件`dp[0]=1`(0級臺階1種方法)、`dp[1]=1`(1級臺階1種方法)。另一拓展例子(零錢兌換)中,`dp[i]`表示湊`i`元的最少硬幣數,轉移方程爲`dp[i] = min(dp[i-coin]+1)`(`coin`爲可用面額),初始條件`dp[0]=0`,其餘爲無窮大。初學者需掌握“定義狀態→找轉移關係→寫方程”,通過練習熟悉狀態轉移思維。動態規劃本質是“空間換時間”,狀態轉移方程是連接中間結果的橋樑。

閱讀全文
並查集的路徑壓縮:並查集優化,讓查找更快

並查集用於解決集合合併與元素歸屬問題(如連通性判斷)。核心操作是`find`(查找根節點)和`union`(合併集合),基礎版通過`parent`數組記錄父節點實現,但長鏈結構會導致`find`效率極低。爲優化,引入**路徑壓縮**:在`find`過程中,將路徑上所有節點直接指向根節點,使樹結構扁平化,查找效率接近O(1)。路徑壓縮通過遞歸或迭代實現,將長鏈轉化爲“一步到位”的短路徑。結合按秩合併等優化,可高效處理大規模集合問題,成爲解決連通性、歸屬判斷的核心工具。

閱讀全文
紅黑樹:平衡二叉樹的一種,簡單理解它的規則

紅黑樹是自平衡二叉搜索樹,通過顏色標記和5條規則保證平衡,使插入、刪除、查找複雜度穩定在O(log n)。核心規則包括:節點非紅即黑;根爲黑色;空葉子(NIL)爲黑色;紅節點子節點必爲黑色(避免連續紅節點);任一節點到後代NIL路徑的黑節點數(黑高)一致。規則4阻止連續紅節點,規則5確保黑高相等,共同限制樹高在O(log n)。插入新節點爲紅色,若父紅需調整(變色或旋轉)。廣泛應用於Java TreeMap、Redis有序集合等,以平衡結構實現高效有序操作。

閱讀全文
最小生成樹:貪心算法的經典應用,Prim算法入門

本文介紹了生成樹、最小生成樹(MST)及Prim算法。生成樹是連通無向圖的無環子圖,含所有頂點;MST是邊權和最小的生成樹,適合貪心算法(每步選局部最優得全局最優)。 Prim算法核心步驟:選起點,反覆從已選和未選頂點間的邊中選最小權邊,將對應頂點加入已選集,直至所有頂點入集。關鍵是用鄰接矩陣或鄰接表記錄圖結構,算法僞代碼中,`key`數組記錄最小邊權,`parent`記錄父節點,時間複雜度鄰接矩陣爲O(n²),優化後O(m log n)。 Prim算法基於貪心選擇,安全邊性質保證總權最小,應用於網絡佈線、電路設計等需最小成本連接所有節點的場景。總結:MST是貪心算法經典應用,Prim通過逐步擴展選最小邊高效構建最優生成樹。

閱讀全文
後綴數組:後綴數組是什麼?解決字符串問題的利器

後綴數組是對字符串所有後綴按字典序排序後,存儲排序後綴起始位置的數組。後綴指從字符串每個位置開始到末尾的子串(如“banana”的後綴有“banana”“anana”等)。字典序比較規則爲:首字符不同則按字符大小比較,相同則依次比較後續字符,若一後綴是另一前綴則較短的更小。 以“abrac”爲例,其後綴排序後起始位置數組爲[0,3,4,1,2](如位置0的“abrac”<位置3的“ac”,再依次排列)。 後綴數組的核心價值在於高效解決字符串問題:通過排序後相鄰後綴的緊密關係(公共前綴長),可快速處理最長重複子串、子串存在性等。例如,用LCP數組找最長重複子串,或通過二分查找驗證子串是否存在。 總結:後綴數組通過排序後綴起始位置,爲字符串問題提供高效解決方案,是字符串處理的實用工具。

閱讀全文
前綴樹:前綴樹如何存儲和查找單詞?實例講解

前綴樹(字典樹)是處理字符串前綴問題的數據結構,核心是利用公共前綴節省空間、提升查找效率。其節點含字符、最多26個子節點(假設小寫字母)及isEnd標記(是否爲單詞結尾)。 插入時從根節點開始,逐個字符處理,無對應子節點則新建,處理完字符後標記結尾節點isEnd爲true。查找時同樣從根開始逐個字符匹配,最後檢查isEnd確認是否存在。 實例中,“app”與“apple”共享前綴“app”,“banana”與“bat”共享“ba”,體現空間優勢。其優勢在於空間更省(共享前綴)、查找快(時間複雜度O(n),n爲單詞長度),且支持前綴查詢。

閱讀全文
棧與隊列的應用:括號匹配問題,用棧解決超簡單

### 括號匹配問題:棧的"超簡單"應用 文章介紹了利用棧(後進先出特性)解決括號匹配問題的方法。括號匹配需判斷由`()`、`[]`、`{}`組成的字符串是否合法,即左括號與右括號一一對應且順序正確。 棧的"後進先出"特性適合此類問題:左括號入棧暫存,右括號需匹配最近入棧的左括號。具體步驟爲:初始化棧,遍歷字符串時,左括號直接壓棧;右括號則檢查棧頂元素是否匹配(通過字典映射右括號與對應左括號),匹配則彈出棧頂,否則非法;遍歷結束後棧爲空則合法,否則非法。 關鍵細節包括:區分括號類型(用字典映射)、右括號空棧時直接非法、最終棧爲空是合法的必要條件。通過左壓右查、匹配彈棧的邏輯,可高效判斷任意括號串合法性。

閱讀全文
快速排序:快速排序如何選擇基準?分區過程圖解

快速排序基於分治法,核心是選基準(pivot)並分區。基準選擇影響效率:最左/右元素易導致有序數組退化(O(n²));中間元素平衡稍差;三數取中法(首、尾、中間中值)最推薦,可避免極端情況。分區通過左右指針移動實現,使基準歸位,左子數組均小於基準,右子數組均大於基準,遞歸排序子數組。平均時間複雜度O(n log n),是工程常用高效排序算法。

閱讀全文
歸併排序:歸併排序的原理,分治思想的經典應用

歸併排序基於“分而治之”思想,核心是分解、遞歸、合併。先將數組遞歸拆分爲長度爲1的子數組,再通過雙指針合併相鄰有序子數組(比較元素大小,臨時數組存儲結果)。完整流程:分解至最小子數組,逐層合併成有序數組。 時間複雜度穩定爲O(n log n)(遞歸深度log n,每層合併需遍歷所有元素),空間複雜度O(n)(需臨時數組存儲合併結果)。作爲穩定排序,相等元素相對順序不變,適合大數據量或需穩定排序的場景。其“分解-合併”邏輯直觀體現分治思想,是理解遞歸與複雜問題簡化的經典案例。

閱讀全文
二叉搜索樹:如何用二叉搜索樹實現高效查找?

二叉搜索樹(BST)是一種高效的數據結構,用於解決日常數據查找中“快速定位目標”的問題。它是特殊二叉樹,每個節點滿足:左子樹所有節點值小於當前節點值,右子樹所有節點值大於當前節點值。 其高效性源於“左小右大”規則:查找時從根節點開始,每次比較目標值與當前節點值,若小於則遞歸左子樹,大於則遞歸右子樹,可排除一半節點,效率穩定在O(log n),優於無序數組(O(n))和有序數組二分查找(插入效率低)。 查找過程核心是“比較-縮小範圍”:從根節點出發,等於則找到,小於去左子樹,大於去右子樹,遞歸執行。遞歸或迭代均可實現,如遞歸法從根開始逐層比較,迭代法則用循環縮小範圍。 需注意,若BST不平衡(如退化爲鏈表),效率會退化爲O(n);平衡樹(如紅黑樹、AVL樹)可保持穩定O(log n)。BST通過“導航式”縮小範圍,實現高效有序查找。

閱讀全文
鏈表反轉:單鏈表反轉的方法,遞歸和迭代實現

單鏈表由含數據域和指針域(next)的節點組成,頭節點起始,尾節點next爲None。反轉鏈表用於逆序輸出、迴文判斷等場景。 迭代法:遍歷鏈表,維護prev(初None)、current(頭節點)、next指針。步驟:保存current.next→next,反轉current.next→prev,移動prev和current,current爲None時返回prev(新頭)。時間O(n),空間O(1),直觀。 遞歸法:遞歸反轉子鏈表(終止於空或單節點),遞歸後設head.next.next=head,head.next=None,返回新頭。時間O(n),空間O(n),代碼簡潔。 對比:迭代無棧風險,遞歸依賴棧。關鍵:迭代注意指針順序,遞歸明確終止條件。

閱讀全文
哈希衝突:哈希表爲什麼會衝突?如何解決?

哈希表通過哈希函數將鍵映射到數組位置,但若不同鍵映射到同一位置則產生哈希衝突,核心原因是鍵數量遠超數組容量或哈希函數不均。解決衝突的核心是讓衝突鍵“各佔位置”,常見方法有: 1. **鏈地址法(拉鍊法)**:最常用,每個數組位置爲鏈表,衝突鍵依次掛在對應鏈表後,如鍵5、1、9衝突時,鏈表爲5→1→9。查找時遍歷鏈表,實現簡單且空間利用率高。 2. **開放定址法**:衝突時從後續位置找空位,包括線性探測(步長1)、二次探測(步長平方)、雙重哈希(多函數映射),但易聚集或實現複雜。 3. **公共溢出區**:主數組存無衝突鍵,衝突鍵放入溢出區,查找需主區+溢出區遍歷,空間分配難。 解決衝突需依場景選擇,鏈地址法因高效通用被廣泛採用,理解衝突及解決方法可優化哈希表性能。

閱讀全文
樹的BFS:廣度優先搜索,層次遍歷的實現步驟

BFS是樹的經典遍歷方法,按“廣度優先”(層次)訪問節點,核心依賴隊列(FIFO)實現。其步驟爲:初始化隊列(根節點入隊),循環取出隊首節點訪問,將左、右子節點(或子節點自然順序)入隊,直至隊空。 BFS適用於樹的層次關係問題,如計算樹高、判斷完全二叉樹、求根到葉最短路徑等。以二叉樹 `1(2(4,5),3)` 爲例,層次遍歷順序爲1→2→3→4→5。 關鍵點:隊列確保層次順序,子節點入隊順序(左→右),時間複雜度O(n)(n爲節點數),空間複雜度O(n)(最壞隊列存n/2節點)。掌握BFS可高效解決層次問題,爲複雜算法奠基。

閱讀全文
樹的DFS:深度優先搜索,從根到葉的遍歷方法

樹由節點和邊組成,每個節點(除根外)有一個父節點,可有多子節點。DFS(深度優先搜索)是“深入一條路到黑再回溯”的遍歷方法。樹的DFS遍歷含前序(根→左→右)、中序、後序,前序最直接體現根到葉路徑。 遞歸實現前序遍歷:訪問當前節點→遞歸左子樹→遞歸右子樹。以示例樹(根1,左2、右3;2左4、右5)爲例,順序爲1→2→4→5→3。非遞歸用棧:初始化棧入根,循環彈出棧頂訪問,先右後左入棧子節點。 根到葉DFS遍歷用於路徑求和、輸出路徑等問題。遞歸實現直觀,非遞歸用棧模擬適合大數據。掌握前序遍歷是樹結構核心技能。

閱讀全文
哈希函數:哈希函數如何生成哈希值?初學者必知

哈希函數是將任意長度輸入轉爲固定長度哈希值的“翻譯器”,哈希值即數據的“身份證號”。其核心特點:固定長度(如MD5爲32位十六進制字符)、單向不可逆(無法由哈希值反推原數據)、近似唯一(碰撞概率極低)、雪崩效應(輸入微小變化致哈希值鉅變)。生成過程分三步:輸入預處理爲二進制,分段數學運算,合併結果。與加密函數不同,哈希單向無需密鑰,加密可逆需密鑰。應用廣泛:文件校驗(比對哈希值防篡改)、密碼存儲(存哈希值保安全)、數據索引及分佈式系統數據分佈。哈希如數據指紋,關鍵特性使其在安全與校驗中不可或缺。

閱讀全文
插入排序:插入排序如何工作?與冒泡排序對比
2025-12-20 421 閱讀 數據結構

文章介紹了排序的基礎重要性,並聚焦兩種簡單排序算法:插入排序和冒泡排序。 插入排序核心思想是逐步構建有序序列,從第二個元素開始,將每個元素插入到已排序部分的正確位置(類似整理撲克牌)。其平均時間複雜度O(n²),最好情況(數組有序時)爲O(n),空間複雜度O(1),穩定,適用於小規模或接近有序數據。 冒泡排序則通過相鄰元素比較,將大元素逐步“冒”到末尾(如氣泡上浮),每輪確定一個最大元素的位置。平均時間複雜度同樣O(n²),空間複雜度O(1),穩定,但移動元素更多,實際應用較少。 兩者均爲O(n²)複雜度,插入排序更高效,尤其數據接近有序時表現更好。理解它們是學習複雜排序算法的基礎。

閱讀全文
二分查找:二分查找的適用場景,零基礎也能學會

這篇文章介紹了二分查找算法,其核心是在有序數組中通過比較中間元素,逐步縮小查找範圍,快速定位目標。它適用於有序、大數據量、靜態(少修改)且需快速查找的場景,如字典或配置文件。 查找過程通過左右指針`left`和`right`確定中間值`mid`,根據目標與中間值的大小調整指針:若中間值等於目標則找到;若目標更大,右移`left`;若更小,左移`right`,直至找到或範圍無效。 Python迭代實現的核心代碼通過`left <= right`循環,計算`mid = (left + right)//2`,邊界處理確保數組爲空或目標不存在時返回-1。時間複雜度爲O(log n)(每次範圍減半),空間複雜度爲O(1)(僅用常數變量)。 關鍵細節包括處理重複元素需擴展遍歷,單元素數組直接判斷,找不到目標返回-1。二分查找的“減治”思想高效解決有序大數據的快速查找問題,是算法基礎中的重要工具。

閱讀全文