1. Java常用API与集合框架概述
作为一名Java开发者,熟练掌握常用API和集合框架是基本功。这些工具就像木匠的工具箱,选对工具能让开发效率事半功倍。在实际项目中,我见过太多因为不了解这些基础而导致的性能问题和代码冗余。
Java API提供了丰富的预构建功能,而集合框架则是处理数据结构的瑞士军刀。它们共同构成了Java开发的核心基础设施。本文将带你深入理解这些关键知识点,包括字符串处理、日期时间操作、数学计算以及各种集合类型的使用场景和底层原理。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 字符串处理:String、StringBuilder与StringBuffer
2.1 String类的核心特性
String是Java中最常用的类之一,但它有几个独特特性常被初学者忽略:
java复制// 字符串创建的四种方式
String str1 = "Hello"; // 字面量方式,使用字符串池
String str2 = new String("Hello"); // 显式创建新对象
char[] chars = {'H','e','l','l','o'};
String str3 = new String(chars); // 通过字符数组
byte[] bytes = {72, 101, 108, 108, 111};
String str4 = new String(bytes); // 通过字节数组
String的不可变性(immutable)设计带来了几个重要影响:
- 线程安全:无需额外同步
- 哈希值缓存:适合作为HashMap的键
- 字符串池优化:减少内存消耗
重要提示:在循环中拼接字符串时,绝对不要使用+操作符。我曾在一个项目中看到这样的代码导致性能下降了近百倍。
2.2 字符串比较的陷阱
字符串比较是最容易出错的地方之一:
java复制String s1 = "Java";
String s2 = "Java";
String s3 = new String("Java");
System.out.println(s1 == s2); // true,都指向字符串池
System.out.println(s1 == s3); // false,s3是堆中新对象
System.out.println(s1.equals(s3)); // true,内容相同
2.3 StringBuilder与StringBuffer选择
当需要频繁修改字符串时,可变字符串类就派上用场了:
| 特性 | StringBuilder | StringBuffer |
|---|---|---|
| 线程安全 | 不安全 | 安全 |
| 性能 | 更高 | 稍低 |
| 使用场景 | 单线程环境 | 多线程环境 |
java复制// StringBuilder典型用法
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 100; i++) {
sb.append(i).append(",");
}
String result = sb.toString();
3. 日期时间处理:从Date到Java 8新API
3.1 传统日期API的缺陷
Java早期的Date和Calendar类设计存在诸多问题:
- Date的月份从0开始,不符合直觉
- SimpleDateFormat非线程安全
- API设计混乱,方法命名不清晰
java复制// 传统日期API的典型问题
Date date = new Date(2023, 1, 1); // 实际是2023年2月1日!
Calendar cal = Calendar.getInstance();
cal.set(Calendar.MONTH, Calendar.JANUARY); // 月份仍要使用常量
3.2 Java 8日期时间API
Java 8引入了全新的日期时间API,位于java.time包下:
java复制// 新API的基本使用
LocalDate today = LocalDate.now();
LocalTime now = LocalTime.now();
LocalDateTime current = LocalDateTime.now();
// 创建特定日期
LocalDate birthday = LocalDate.of(1990, Month.JANUARY, 1);
//
