Java 核心类库是 JDK 内置的基础类集合,涵盖数据处理、I/O、并发等通用功能,无需手动实现即可直接调用;数据结构是组织和存储数据的方式,Java 通过集合框架将常用数据结构封装为可直接使用的类,二者结合支撑起 Java 程序的基础数据操作能力。
一、 核心类库(工具类为主)
核心类库主要位于 java.lang (默认导入)、 java.util 、 java.math 等包中,以下是高频核心工具类:
- 字符串相关类
-
String :不可变字符序列,底层是 char[] (JDK8)或 byte[] (JDK9+),每次修改都会生成新对象;重写了 equals() 和 hashCode() ,支持字符串拼接、查找、截取等操作。
-
StringBuffer :可变字符序列,线程安全(方法加 synchronized ),适合多线程环境下的字符串修改。
-
StringBuilder :可变字符序列,非线程安全,效率高于 StringBuffer ,是单线程环境的首选。
- 日期时间类
-
旧版( java.util ): Date 表示时间戳, SimpleDateFormat 用于格式化,但存在线程不安全问题; Calendar 用于日期字段的计算,设计复杂、易出错。
-
新版( java.time ,JDK8 引入): LocalDate (日期)、 LocalTime (时间)、 LocalDateTime (日期+时间),支持链式调用; DateTimeFormatter 负责格式化与解析,替代 SimpleDateFormat ,线程安全。
- 数学与数值类
-
Math :提供静态方法,如 abs() (绝对值)、 round() (四舍五入)、 random() (随机数)、 max() / min() 等,基于系统原生方法实现,效率高。
-
BigInteger :处理任意长度的整数,解决 int / long 的取值范围限制,支持加减乘除、取模、幂运算等。
-
BigDecimal :处理高精度小数,解决浮点数运算的精度丢失问题,需通过 String 构造方法初始化,常用方法有 add() 、 subtract() 、 multiply() 、 divide() (需指定舍入模式)。
- 包装类
对应 8 种基本数据类型,分别是 Byte 、 Short 、 Integer 、 Long 、 Float 、 Double 、 Character 、 Boolean ,实现了基本类型与对象的转换。
-
自动装箱:基本类型→包装类(如 int → Integer );自动拆箱:包装类→基本类型(如 Integer → int )。
-
提供常量(如 Integer.MAX_VALUE )和静态方法(如 Integer.parseInt() 实现字符串转整数)。
二、 数据结构(集合框架)
Java 集合框架( java.util 包)是数据结构的核心实现,分为 Collection 和 Map 两大体系,支持动态存储、检索、修改数据,替代了传统数组的固定长度限制。
- 核心接口体系
-
Collection:单列集合根接口,存储单个元素,子接口包含 List、Set、Queue。
-
List:有序、可重复,支持索引访问,子接口实现类包含 ArrayList、LinkedList、Vector。
-
Set:无序、不可重复,基于哈希或排序去重,子接口实现类包含 HashSet、LinkedHashSet、TreeSet。
-
Queue:队列,遵循 FIFO(先进先出)原则,实现类包含 LinkedList、PriorityQueue。
-
Map:双列集合根接口,存储键值对(Key-Value),Key 唯一,实现类包含 HashMap、LinkedHashMap、TreeMap、Hashtable。
- 常用数据结构实现类详解
(1) List 系列(有序可重复)
-
ArrayList:底层是动态数组,初始容量 10,扩容时默认扩容 1.5 倍;查询快(通过索引直接访问),增删慢(需移动元素);非线程安全,适合读多写少场景。
-
LinkedList:底层是双向链表,每个节点存储前驱、后继和元素;增删快(仅需修改节点引用),查询慢(需遍历链表);实现了 Deque 接口,可作为栈、队列使用;非线程安全。
-
Vector:底层是动态数组,扩容时默认扩容 2 倍;方法加 synchronized ,线程安全,但效率低于 ArrayList ,多用于老旧项目。
(2) Set 系列(无序不可重复)
-
HashSet:底层基于 HashMap 实现,元素作为 HashMap 的 Key,Value 为固定对象;利用哈希表去重,元素需重写 equals() 和 hashCode() ;无序,查询、增删效率高(时间复杂度 O(1))。
-
LinkedHashSet:继承 HashSet ,底层是 LinkedHashMap ;有序(维护插入顺序),兼具 HashSet 的高效和链表的有序性。
-
TreeSet:底层基于红黑树实现;排序(自然排序或自定义 Comparator),查询、增删效率为 O(log n);元素需实现 Comparable 接口或指定比较器。
(3) Map 系列(键值对存储)
-
HashMap:底层是数组+链表+红黑树(JDK8 优化);Key 不可重复,Value 可重复;Key 需重写 equals() 和 hashCode() ;非线程安全,允许 Key/Value 为 null ;默认容量 16,负载因子 0.75,扩容为 2 倍。
-
LinkedHashMap:继承 HashMap ,维护双向链表记录插入顺序;有序(插入或访问顺序),适合需要保留键值对顺序的场景。
-
TreeMap:底层基于红黑树;Key 自动排序(自然排序或自定义比较器);Key 需实现 Comparable 接口;不允许 Key 为 null 。
-
Hashtable:底层是哈希表;方法加 synchronized ,线程安全;不允许 Key/Value 为 null ;效率低于 HashMap ,逐渐被淘汰。
- 工具类
-
Collections:提供静态方法操作集合,如 sort() (排序 List)、 reverse() (反转 List)、 synchronizedList() (将非线程安全集合转为线程安全)、 binarySearch() (二分查找)。
-
Arrays:提供静态方法操作数组,如 sort() (数组排序)、 toString() (数组转字符串)、 asList() (数组转 List)。
三、 核心类库与数据结构的关联
-
数据结构依赖核心类库:如 ArrayList 底层依赖 Object[] 数组, HashMap 依赖 Object 类定义的 hashCode() / equals() 方法。
-
核心类库借助数据结构优化性能:如 String 的不可变性基于字符数组实现, LinkedList 作为队列依赖链表结构的 FIFO 特性。