文章系统性介绍了 Java LinkedList 的常用 API,包括 peek/peekFirst/peekLast(获取头、首、尾元素但不删除)、poll/pollFirst/pollLast(获取并删除头、首、尾元素)、offer/offerFirst/offerLast(在尾部、头部或末尾插入元素)及其返回值含义。随后通过一个完整的示例代码展示了这些方法的具体调用及运行结果,帮助读者直观理解各 API 的行为和使用场景。

本篇介绍了 LeetCode 第 647 题“回文子串”。题目要求统计字符串中所有回文子串的数量,子串位置不同即视为不同。文中给出基于中心扩展的 O(n²) 解法:遍历 2·n‑1 个可能的中心,对每个中心向左右扩展,只要字符相等即计数并继续扩展,最终返回累计结果。代码实现简洁,示例演示了输入 “aaa” 时得到 6 个回文子串。

本文介绍了 LeetCode 第 322 题“零钱兑换”的解法,使用自底向上的动态规划求解最少硬币数。首先初始化一个长度为 amount+1 的数组 target,全部填充值 amount+1(视为不可达),并设 target[0]=0。随后遍历金额 1..amount,对每个硬币若能使用则更新 target[i] 为 target[i‑coin]+1 与当前值的最小值。最终若 target[amount] 仍为初始值则返回 -1,否则返回该最小硬币数。代码实现完整且包括示例测试。

本文介绍了 LeetCode 1324 “竖直打印单词”题目的实现思路与 Java 代码。首先将输入字符串按空格分割为单词数组,遍历求出最长单词长度作为行数。随后逐行遍历,每行依次取各单词对应位置的字符,若该单词不足当前行则填充空格。构建完一行后,从右向左裁剪掉末尾的多余空格,得到最终的垂直字符串。代码中使用 `StringBuilder` 进行字符拼接,`split`、`maxLength`、`substring` 等标准库方法完成上述操作,并在 `main` 方法中给出示例调用。整个实现简洁直观,满足题目对输出列表无尾随空格的要求。

Collections 是 JDK 提供的集合工具类,位于 java.util,封装了大量静态方法,方便对 List、Set 等进行常见操作。文章按功能划分介绍了:① 排序与置换(reverse、shuffle、sort、swap 等)并给出示例代码;② 查找与统计(binarySearch、max、min、frequency、fill),说明二分查找需先排序;③ 线程安全包装(synchronizedList 等),比较其实现与旧的 Vector/Hashtable,推荐使用并发包的 CopyOnWriteArrayList、ConcurrentHashMap;④ 不可变集合(emptyXxx、singletonXxx、unmodifiableXxx),演示调用后抛出 UnsupportedOperationException;⑤ 其他实用方法(addAll、disjoint)。最后强调阅读源码、理解 JDK 设计的重要性,认为 Collections 不仅是便利工具,更是提升编码水平的学习材料。

在Java中,只有在需要判断对象的“逻辑相等”时才应重写equals,例如作为Map、Set的键或值类;若实例唯一、类私有或已继承合适实现,则无需重写。重写时必须遵守五大原则——自反、对称、传递、一致、非空——并同步重写hashCode,保持参数类型为Object,使用==检查同一实例、instanceof 验证类型、先比较大小提升性能,最后逐字段比较。违反这些规则会导致不对称等错误,如Date与Timestamp的equals示例所示。