# Java **Repository Path**: david3901093/Java ## Basic Information - **Project Name**: Java - **Description**: java学习代码和笔记 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-06 - **Last Updated**: 2026-07-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Java 学习项目 高中信息学 + Java 编程学习项目,涵盖基础语法、数据结构、算法、Web 开发和数据库。所有学习笔记统一归档在 `note/` 目录下。 ## 项目总览 | 模块 | 目录 | 说明 | 文件数 | |------|------|------|--------| | Java 基础 | `Java/` | 基础语法、面向对象、集合、流、多线程、新特性等 | 224 | | 算法 | `algorithm/` | LeetCode、AcWing、蓝桥杯、排序、位运算等 | 153 | | 数据结构 | `DS/` | 链表、栈、队列、树、图、排序、搜索、八皇后等 | 67 | | Java Web | `javaweb/` | Servlet、JSP、AJAX、过滤器、购物车等 | 23 | | JDBC | `jdbc/` | 数据库连接与操作 | 9 | | 综合项目 | `project/` | 综合练习项目 | 9 | | 作业 | `Homework/` | 课程作业 | 6 | | 学习笔记 | `note/` | 系统归档的学习讲义 | 4 | ## 目录结构 模块按「数据结构和主题」分目录组织:DS 按链表 / 栈 / 队列 / 树 / 图 / 排序 / 搜索等核心结构拆分;algorithm 按链表 / 数组 / 字符串 / 数学 / 位运算 / 排序 / 动态规划 / 贪心 / 递归 / 哈希 / AcWing / 蓝桥杯等主题分包。 ``` Java/ ├── algorithm/ # 算法模块 (153) │ └── src/algorithm/ │ ├── LinkedList/ # 链表题 (14) │ ├── array/ # 数组题 (5) │ ├── string/ # 字符串题 (10) │ ├── math/ # 数学题 (8) │ ├── bit/ # 位运算 (14) │ ├── sort/ # 排序算法 (12) │ ├── search/ # 查找算法 (2) │ ├── dp/ # 动态规划 (12) │ ├── greedy/ # 贪心 (5) │ ├── recursion/ # 递归/回溯 (6) │ ├── hashmap/ # 哈希表 (6) │ ├── acwing/ # AcWing 竞赛题 (12) │ │ ├── bigInteger/ # 高精度 (4) │ │ ├── doublePointer/ # 双指针 (1) │ │ ├── prefixAndDiff/ # 前缀和差分 (1) │ │ └── sort/ # 排序应用 (6) │ ├── blueBridge/ # 蓝桥杯真题 (40) │ │ ├── year2013/ # 2013 年 (14) │ │ ├── year2014/ # 2014 年 (5) │ │ ├── year2015/ # 2015 年 (10) │ │ ├── year2016/ # 2016 年 (10) │ │ └── year2017/ # 2017 年 (1) │ ├── common/utils/ # 通用工具 (1) │ ├── util/ # 共享节点 / 工具 (3) │ └── misc/ # 杂项 (2) │ ├── DS/ # 数据结构模块 (67) │ └── src/ds/ │ ├── list/ # 链表 (15) │ ├── stack/ # 栈 (3) │ ├── queue/ # 队列 (3) │ ├── array/ # 线性表 / 数组 (6) │ ├── tree/ # 树 (10) │ ├── graph/ # 图 (10) │ ├── sort/ # 排序 (6) │ ├── search/ # 查找 (3) │ ├── string/ # 字符串 (1) │ ├── dp/ # 动态规划 (1) │ ├── recursion/ # 递归 (4) │ ├── math/ # 数学 (2) │ └── calculator/ # 计算器 (3) │ ├── Java/ # Java 基础模块 (224) ├── javaweb/ # Java Web 模块 (23) ├── jdbc/ # 数据库模块 (9) ├── project/ # 综合项目 (9) ├── Homework/ # 课程作业 (6) ├── lib/ # 外部依赖 (Java EE 等) ├── note/ # 学习笔记 (4) └── CLAUDE.md # 笔记归档规范 ``` ## 文件清单 ### algorithm 模块 (153 文件) **LinkedList/** — 链表题 (14) `DEQueue.java`, `FindStartListNode.java`, `HuiwenLinkList.java`, `KReverseLinkList.java`, `LeetcodeTest.java`, `ListUtil.java`, `MergeKLists.java`, `MyLinkedList.java`, `MyList.java`, `MyListTest.java`, `MyQueue.java`, `MyStack.java`, `RandomNodeList.java`, `SortList.java` **array/** — 数组题 (5) `DisappearedNumber.java`, `MatrixRevolve.java`, `MinSubArrays.java`, `PrintMatrixByClockwise.java`, `RevolveOfArray.java` **string/** — 字符串题 (10) `CombineSentence.java`, `Match.java`, `RepeatedLetter.java`, `RerveaseString.java`, `ReverseBYWords.java`, `RotateString.java`, `SequenceOfSubString.java`, `StringMatch.java`, `ZPrint.java`, `ZipString.java` **math/** — 数学题 (8) `BezoutProblem.java`, `DigitalChange.java`, `Formula.java`, `GCD.java`, `GiniCoefficient.java`, `Pow.java`, `Prime.java`, `Reverse.java` **bit/** — 位运算 (14) `BinaryAdd.java`, `BitCompute.java`, `BitMap.java`, `Bitset.java`, `ChangeBit.java`, `FloatOfBinary.java`, `MaxNumWithoutIf.java`, `MissingNumber.java`, `NumberOfBinary.java`, `PowOfTwo.java`, `RangeBitwiseAnd.java`, `SingleNumber.java`, `SingleNumber2.java`, `SingleNumber3.java` **sort/** — 排序算法 (12) `HeapSort.java`, `InsertSort.java`, `KthLargestElementAnArray.java`, `MergeSort.java`, `QSOddAndEven.java`, `QuickSort.java`, `RadixSort.java`, `ReversePairs.java`, `SearchAndSort.java`, `SelectSort.java`, `SortSummary.java`, `ThreeSort.java` **search/** — 查找算法 (2) `BinarySearch.java`, `SquareRoot.java` **dp/** — 动态规划 (12) `CoinCombine.java`, `CoinPayment.java`, `Knapsack01.java`, `LCS.java`, `LTS.java`, `LongestSequence.java`, `MaxSubSum.java`, `MinSum.java`, `RobotWalking.java`, `ScaleWeight.java`, `Trap.java`, `WalkStep.java` **greedy/** — 贪心 (5) `ArrangeWork.java`, `BoatProblem.java`, `MaxCover.java`, `MinimumHalfOperations.java`, `Nim.java` **recursion/** — 递归/回溯 (6) `MonkeyKingJosephus.java`, `Permutation.java`, `PermutationUnique.java`, `PrimeRing.java`, `Shudu.java`, `SubSet.java` **hashmap/** — 哈希表 (6) `HashMap.java`, `HashMapTest.java`, `IMap.java`, `LRU.java`, `RepeatedElements.java`, `SetAllHashMap.java` **acwing/bigInteger/** — 高精度 (4) `Add.java`, `Divide.java`, `Multiply.java`, `Subtract.java` **acwing/doublePointer/** — 双指针 (1) `Subsequence.java` **acwing/prefixAndDiff/** — 前缀和/差分 (1) `PreSum.java` **acwing/sort/** — 排序应用 (6) `CubeRoot.java`, `InversionPair.java`, `KNumber.java`, `MergeSort.java`, `QuickSort.java`, `Square.java` **blueBridge/year2013/** — 蓝桥杯 2013 (14) `BB2013_CutSquare.java`, `BB2013_ExpensesOfCabinet.java`, `BB2013_FindCharge.java`, `BB2013_GoldenSplit.java`, `BB2013_LuckyNumber.java`, `BB2013_MersennePrime.java`, `BB2013_MistakeTickets.java`, `BB2013_MixedNumber.java`, `BB2013_RPN.java`, `BB2013_Rational.java`, `BB2013_ReversedTag.java`, `BB2013_Rumor.java`, `BB2013_Sort.java`, `BB2013_Zhonghua.java` **blueBridge/year2014/** — 蓝桥杯 2014 (5) `BB2014_FibSequence.java`, `BB2014_FluctuateSequence.java`, `BB2014_LangtonAnt.java`, `BB2014_MatrixReverseCoin.java`, `BB2014_PI.java` **blueBridge/year2015/** — 蓝桥杯 2015 (10) `BB2015_AddToMultiply.java`, `BB2015_Bomb.java`, `BB2015_CubeSelf.java`, `BB2015_Distance.java`, `BB2015_DivideNumber.java`, `BB2015_LeiHouZi.java`, `BB2015_PrintSquare.java`, `BB2015_RecycleLength.java`, `BB2015_TapeOfCard.java`, `BB2015_Walnut.java` **blueBridge/year2016/** — 蓝桥杯 2016 (10) `BB2016_BuildingBlock.java`, `BB2016_Candle.java`, `BB2016_Distribution.java`, `BB2016_Groups.java`, `BB2016_HomeWork.java`, `BB2016_Stamp.java`, `BB2016_Sum.java`, `BB2016_SumOfSquareOfFourNumbers.java`, `BB2016_TakeBall.java`, `BB2016_ZipChange.java` **blueBridge/year2017/** — 蓝桥杯 2017 (1) `BB2017_DivideNumber.java` **common/utils/** — 通用工具 (1) `RandomArrayUtil.java` **util/** — 共享节点/工具 (3) `CommonNode.java`, `ListNode.java`, `SortUtil.java` **misc/** — 杂项 (2) `DataIndex.java`, `RobotPlow.java` ### DS 模块 (67 文件) **list/** — 链表 (15) `CircularLinkedList.java`, `DeleteDupleEle.java`, `DoubleLinkedList.java`, `JZ022_KthNodeFromEnd.java`, `Josephus_LinkedListImpl.java`, `LC002_AddTwoNumbers.java`, `LC021_MergeTwoSortedLists.java`, `LC086_PartitionList.java`, `LC206_ReverseLinkedList.java`, `ListNode.java`, `MergeSortedList.java`, `MiddleNode.java`, `MyLinkedList.java`, `PokerMagic.java`, `ReverseList.java` **stack/** — 栈 (3) `ExpressionEvaluator.java`, `MyStack.java`, `ValidParenthesis.java` **queue/** — 队列 (3) `CircularQueue.java`, `DoubleEndCircularDeque.java`, `MyCircularDeque.java` **array/** — 线性表/数组 (6) `Josephus_ArrayImpl.java`, `MyArrayList.java`, `SeqList.java`, `SeqListTest.java`, `SortedArrayMerge.java`, `YangHuiTrangle.java` **tree/** — 树 (10) `AVLTree.java`, `AVLTreeTest.java`, `ArrayBinaryTree.java`, `BinarySortTree.java`, `BinaryTree.java`, `BinaryTreeNode.java`, `HuffmanNode.java`, `HuffmanTree.java`, `ThreadedBinaryTree.java`, `TreeNode.java` **graph/** — 图 (10) `AdjacencyMatrixGraph.java`, `DijkstraShortestPath.java`, `EdgeData.java`, `Graph.java`, `GraphTest.java`, `KruskalMST.java`, `MGraph.java`, `MinTree.java`, `PrimMST.java`, `VisitedVertex.java` **sort/** — 排序 (6) `HeapSort.java`, `InsertSort.java`, `MergeSort.java`, `QuickSort.java`, `RadixSort.java`, `ShellSort.java` **search/** — 查找 (3) `BinarySearch.java`, `FibonacciSearch.java`, `InterpolationSearch.java` **string/** — 字符串 (1) `KMPMatcher.java` **dp/** — 动态规划 (1) `KnapsackProblem.java` **recursion/** — 递归 (4) `EightQueens.java`, `EightQueensTest.java`, `MazePath.java`, `MazePathTest.java` **math/** — 数学 (2) `Complex.java`, `ComplexTest.java` **calculator/** — 计算器 (3) `CalculatorForm.java`, `CalculatorTest.java`, `SimpleIntStack.java` ## 命名规范 - **文件名 = 类名**,PascalCase - **来源前缀**: - LeetCode → `LC###_XXX`(题号补零到 3 位) - 剑指 Offer → `JZ###_XXX` - 牛客 → `NC###_XXX` - 蓝桥杯 → `BB{year}_XXX`(4 位年份) - 基础实现无题号 → 保持英文类名(`QuickSort.java` 等) - **方法名**:camelCase(如 `missingNumber`、`quickSort`) - **常量**:全大写下划线 ## LeetCode 刷题工作流 新刷一道 LeetCode 题目时,按以下 4 步操作,可保证不破坏现有命名与目录结构。 ### 步骤 1:确定归属模块与主题目录 先判断题目核心考点,再选择模块和子目录: | 题目特征 | 归属模块 | 主题子目录 | | --- | --- | --- | | 数据结构本身的设计/操作 | `DS/src/ds/` | `list/`、`stack/`、`tree/` | | 算法技巧的应用 | `algorithm/src/algorithm/` | `dp/`、`bit/`、`greedy/` | **判定原则**:看题目在考"用什么结构"还是"用什么技巧"。考结构 → DS,考技巧 → algorithm。 > ⚠️ 同一道题在两个模块都可能放得下时,**优先放 algorithm**(按技巧分包更细,能避免 DS 单目录膨胀)。 ### 步骤 2:按模块选择命名风格 **DS 模块**(严格 `LC###_XXX`): ``` DS/src/ds/list/LC023_MergeKSortedLists.java DS/src/ds/list/LC206_ReverseLinkedList.java ``` **algorithm 模块**(优先英文描述名): ``` algorithm/src/algorithm/LinkedList/MergeKLists.java algorithm/src/algorithm/array/RevolveOfArray.java algorithm/src/algorithm/bit/SingleNumber.java ``` algorithm 目录不强制 `LC###` 前缀;当英文名与目录里现有文件冲突时,才补 `LC###_` 区分(如 `LCS.java` vs `LC1143_LongestCommonSubsequence.java`)。 ### 步骤 3:建立配套笔记 每道有收获的题,在 `note/` 下同步建一篇笔记: ``` note/【<当前最大值+1>】【LeetCode】题目中文名.md ``` 笔记必须包含四节(详见下方"笔记模板"): - `## ❓ 学习记录` — 题目原文、自己的第一反应、卡点 - `## 笔记正文`(含 `### 目录`)— 解题思路、复杂度、关键代码片段 - `## 🔁 答疑复盘` — 看题解后的认知修正 - `## 📌 巩固思考题` — 🟢🟡🔴 三档自测 > 📌 序号不要跳号。`ls note/` 看现有最大值,再 +1。 ### 步骤 4:更新 README + 提交 1. 在本 README 的「文件清单」对应小节末尾追加新文件名 2. 同步更新「项目总览」表中的 `algorithm` / `DS` 文件数 3. `git add` 新文件 → 一个题目一次提交(commit message 见下) 4. 提交后 `git push Java master` + 同步 `tutorial` **推荐 commit message 格式**: ``` LC023: 合并K个升序链表 (algorithm/LinkedList) LC206: 反转链表 (DS/list) ``` --- ### 完整示例:刷 LeetCode 23 合并 K 个升序链表 1. **判定**:链表 + 堆(分治合并)→ 考技巧 → `algorithm/LinkedList/` 2. **建文件**:`algorithm/src/algorithm/LinkedList/MergeKLists.java`(该名未占用,无需 LC 前缀) 3. **建笔记**:`note/【0005】【LeetCode】合并K个升序链表.md`(当前最大 0004 → 0005) 4. **更新 README**:在 `algorithm/LinkedList/` 列表追加 + 文件总数 153 → 154 5. **提交**:`LC023: 合并K个升序链表 (algorithm/LinkedList)` → push ### 跨平台提示 - Windows 的 NTFS 默认大小写不敏感,`git mv` 改大小写要用 `tmp` 中转: ```bash git mv LinkedList tmp_l && git mv tmp_l linkedlist ``` - 涉及中文文件名时,建议 commit message 用纯 ASCII(避免不同终端编码差异) ## 笔记归档(note/ 目录) 所有学习笔记统一存放在 `note/` 目录,遵循以下命名规则: **文件名格式**:`【4位数字序号】【分类标签】名称.md` **分类标签**: - `【算法知识点】` — 算法原理与模板 - `【LeetCode】` — LeetCode 单题笔记 - `【Java基础】` — Java 基础语法 / 体系 - `【教材-章节】` — 教材章节学习笔记(如《算法竞赛入门经典》第 X 章) - `【NOIP真题】` / `【CSP真题】` — 竞赛真题 **序号规则**:从 0001 起连续递增,确保文件在任意操作系统下按数字严格排序。 **当前笔记列表**: ``` note/【0001】【算法知识点】协同过滤算法原理与医疗应用.md note/【0002】【算法知识点】缺失数字问题-异或与求和配对消除模板.md note/【0003】【LeetCode】轮转数组.md note/【0004】【Java基础】Java异常处理体系详解.md ``` **笔记模板**(完整讲义结构): ```markdown # 【分类标签】标题 ## ❓ 学习记录 学生提问、追问答疑原文: {{逐条完整记录所有输入}} ## 笔记正文 {{分目录章节编号的完整教学讲义}} ### 目录 ``` 1. xxx 2. xxx ``` ## 🔁 答疑复盘 {{每一次追问 → 通俗讲解,一一对应}} ## 📌 巩固思考题 🟢 基础题:XXX 解答 YYYY 🟡 应用题:XXX 解答 YYYY 🔴 拓展题:XXX 解答 YYYY ``` ## 提交规范 - Git 分支:`main` / `master` 为主分支,日常学习在 `tutorial` 分支 - Commit message:中文短句描述改动内容,或英文小写 + 短横线格式 - 笔记 `note/` 目录的 `bash.exe.stackdump` 等临时文件须加入 `.gitignore` 忽略 ## 技术栈 - **语言**:Java - **IDE**:IntelliJ IDEA - **构建**:Maven - **版本控制**:Git + Gitee - **Web**:Servlet / JSP - **数据库**:JDBC