java总结

一、Java 容器核心分类(先分清体系)

Java 容器主要分为两大体系,再结合基础的数组对比,整体结构如下:

类别 核心实现类 底层结构 核心特点
基础数组 String[]/int[] 连续内存空间 固定长度、查询快(下标访问)、增删慢、支持基本类型
集合 - List ArrayList、LinkedList 动态数组 / 双向链表 有序、可重复、允许 null;ArrayList 查询快增删慢,LinkedList 增删快查询慢
集合 - Set HashSet、TreeSet 哈希表 / 红黑树 无序(TreeSet 有序)、不可重复、HashSet 查询增删快,TreeSet 可排序
集合 - Map HashMap、TreeMap、Hashtable 哈希表 / 红黑树 键值对存储、键唯一;HashMap 非线程安全(效率高),Hashtable 线程安全(效率低)

二、核心容器详解(重点 + 高频)

1. 基础数组(不是集合,但最基础)
  • 核心特点:长度固定,一旦创建不能改;支持基本类型(int \[\]、char \[\])和引用类型(String \[\]);下标访问 O (1),增删需手动移动元素(O (n))。
  • 使用场景:数据长度固定、频繁查询、无需增删的场景(比如固定长度的配置参数)。
  • 示例int[] arr = new int[5]; arr[0] = 10;
2. List(有序可重复)
(1)ArrayList(最常用)
  • 底层:动态扩容数组(默认初始容量 10,满了扩容 50%);
  • 优势:查询(get (index))、遍历快(O (1));
  • 劣势:中间增删慢(需移动元素,O (n));
  • 场景:频繁查询、少量增删(比如列表展示数据)。
(2)LinkedList
  • 底层:双向链表;
  • 优势:首尾增删快(addFirst/addLast,O (1));
  • 劣势:查询慢(需遍历链表,O (n));
  • 场景:频繁增删、少量查询(比如队列 / 栈实现)。
3. Set(无序不可重复)
(1)HashSet
  • 底层:基于 HashMap 实现(值存在 key,value 为固定对象);
  • 特点:无序、不可重复、查询 / 增删 O (1);
  • 去重原理:依赖元素的hashCode()equals()方法;
  • 场景:去重、快速查找元素是否存在(比如用户 ID 去重)。
(2)TreeSet
  • 底层:红黑树;
  • 特点:有序(自然排序 / 自定义排序)、不可重复、查询 / 增删 O (logn);
  • 场景:需要排序的去重场景(比如按价格排序的商品 ID)。
4. Map(键值对,键唯一)
(1)HashMap(最常用)
  • 底层:哈希表(数组 + 链表 / 红黑树,JDK8+);
  • 特点:无序、键唯一、查询 / 增删 O (1);非线程安全、允许 null 键 / 值;
  • 核心:键的去重依赖hashCode()equals()
  • 场景:键值对存储(比如统计次数、缓存数据)。
(2)TreeMap
  • 底层:红黑树;
  • 特点:键有序(自然排序 / 自定义排序)、查询 / 增删 O (logn);
  • 场景:需要按键排序的键值对(比如按时间排序的日志)。
(3)Hashtable
  • 底层:哈希表;
  • 特点:线程安全(方法加 synchronized)、效率低;不允许 null 键 / 值;
  • 场景:几乎不用(替代方案:ConcurrentHashMap,线程安全且效率高)。

三、核心选型思路(快速选对容器)

  1. 需要下标访问 / 频繁查询 → ArrayList(别用 LinkedList);
  2. 频繁首尾增删 → LinkedList(比如实现队列);
  3. 去重 + 快速查找 → HashSet;
  4. 去重 + 排序 → TreeSet;
  5. 键值对存储 + 快速查询 → HashMap;
  6. 键值对 + 按键排序 → TreeMap;
  7. 线程安全的键值对 → ConcurrentHashMap(替代 Hashtable);
  8. 长度固定 + 基本类型 → 数组。

四、关键区别(避坑重点)

  1. ArrayList vs 数组:数组长度固定,ArrayList 动态扩容;数组支持基本类型,ArrayList 只支持引用类型(需用包装类);
  2. HashMap vs Hashtable:HashMap 非线程安全、允许 null,Hashtable 反之;
  3. HashSet vs TreeSet:HashSet 无序高效,TreeSet 有序但效率稍低;
  4. List vs Set:List 有序可重复,Set 无序不可重复。
方法类型 所属容器 / 工具类 核心使用场景
Arrays.sort()/copyOf() 基础数组(int \[\]/String \[\]) 数组排序、扩容 / 缩容
add(index, e)/get(index) List(ArrayList/LinkedList) 有序集合的下标增删、查询
addFirst()/addLast() LinkedList(List 子类) 链表首尾快速增删(队列 / 栈)
add()/contains() Set(HashSet/TreeSet) 去重集合的增删、存在性判断
first()/last() TreeSet/TreeMap 有序集合的最值获取
put()/getOrDefault()/merge() Map(HashMap/TreeMap) 键值对存储、统计计数
entrySet()/keySet() Map(所有实现类) Map 的高效遍历
相关推荐
咩咩啃树皮7 小时前
第40篇:Vue3组件化开发精讲——组件拆分、复用、父子通信、工程化架构
java·前端·架构
灯澜忆梦7 小时前
GO_并发编程---定时器
开发语言·后端·golang
鱟鲥鳚7 小时前
Spring Boot 集成 LangChain4j:从模型调用到 Tool Calling(Demo版)
java·spring boot
-银雾鸢尾-7 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-8 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白9 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
腾渊信息科技公司9 小时前
Spring Boot对接MES实战:视觉检测数据自动同步方案
java·人工智能·spring boot·后端·计算机视觉·ai·软件需求
爱笑的源码基地10 小时前
高并发 Redis 缓存门诊HIS系统源码,含财务统计药房进销存
java·程序·门诊系统·诊所系统·云诊所源码
wuqingshun31415910 小时前
TCP超时重传机制是为了解决什么问题?
java
段一凡-华北理工大学11 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化