SuperAPI AI 工具集

java-developer

编程与开发

查看项目

更新于 10-16 02:17

技能介绍

Java Developer

用途

在以下场景使用本技能:为 LeetCode 题目编写新的 Java 解法;在 Java 中实现数据结构或算法;将其他语言的解法转换为 Java;使用 JUnit 搭建 Java 测试用例。

代码结构

遵循项目的 Java 约定:包结构为 AlgorithmJava、DataStructure、LeetCodeJava;使用 Java 8 兼容特性;包含正确的 import 和类声明;遵循 camelCase 命名约定。

针对 LeetCode 题目,采用如下结构:

package LeetCodeJava;

/**

  • Problem {number}: {title}
  • Difficulty: {Easy/Medium/Hard}
  • {Brief problem description}
  • Time Complexity: O(?)
  • Space Complexity: O(?) */ public class Problem{Number}{Title} { public ReturnType methodName(InputType param) { // Implementation } }

最佳实践

面向面试优化:先写出清晰、可读的代码;只为复杂逻辑添加注释;使用有意义的变量名;显式处理边界情况。

常见模式:双指针使用 left、right 或 i、j;滑动窗口使用 start、end;二分查找使用 lo、hi、mid;DFS/BFS 使用带显式类型的 Stack/Queue。

优先使用的数据结构:当大小变化时用 List<> 代替数组;用 HashMap<> 实现 O(1) 查找;用 HashSet<> 做唯一性检查;用 PriorityQueue<> 进行堆操作;用 Deque<> 获得栈/队列的灵活性。

性能准则

时间复杂度目标:数组问题争取 O(n) 或 O(n log n);字符串问题争取用 HashMap/数组计数达到 O(n);树问题通常 O(n) 遍历即为最优;图问题 BFS/DFS 为 O(V + E)。

空间优化:尽可能原地修改输入;用位运算处理布尔数组;考虑用迭代代替递归以获得 O(1) 空间。

测试方法

包含测试用例:

// In test class @Test public void testBasicCase() { Problem{Number}{Title} solution = new Problem{Number}{Title}(); assertEquals(expected, solution.methodName(input)); }

@Test public void testEdgeCase() { // Test empty input, null, single element, etc. }

需要避免的常见错误

整数溢出:大求和时使用 long;数组越界:检查 i < arr.length;空指针:校验输入;差一错误:仔细检查循环边界;可变与不可变:注意引用。

Java 专属技巧

常用方法:

// String s.charAt(i), s.substring(i, j), s.toCharArray()

// Collections Collections.sort(list), Collections.reverse(list) Arrays.sort(arr), Arrays.fill(arr, val)

// Math Math.max(a, b), Math.min(a, b), Math.abs(x)

// Queue/Stack queue.offer(), queue.poll(), queue.peek() stack.push(), stack.pop(), stack.peek()

用于排序的 Lambda 表达式:

Arrays.sort(intervals, (a, b) -> a[0] - b[0]); PriorityQueue<int[]> pq = new PriorityQueue<>((a, b) -> a[0] - b[0]);

示例工作流

从 leetcode_java/ 读取题目或创建新文件;识别模式(双指针、滑动窗口、DP 等);用清晰的变量名编写解法;在注释中添加复杂度分析;用包含边界情况的示例进行测试;在正确解法可用后按需优化。

项目特定说明

Maven 项目:用 mvn compile 构建,用 mvn test 测试;已配置 JUnit 5 用于测试;题目按算法类型组织;遵循包内现有代码风格。