当前位置: 首页 > news >正文

ArrayList、HashSet、HashMap 核心知识点+常用操作速记

文章目录

  • ArrayList、HashSet、HashMap 核心知识点+常用操作速记
    • 1. ArrayList 核心知识点
      • 1.1 核心特性
      • 1.2 常用操作速记
        • 1.2.1 创建
        • 1.2.2 增/改操作
        • 1.2.3 查询操作
        • 1.2.4 删除操作
        • 1.2.5 遍历操作(核心+极简代码示例)
        • 1.2.6 基础属性操作
      • 1.3 补充知识点(新手必看)
    • 2. HashSet 核心知识点
      • 2.1 核心特性
      • 2.2 常用操作速记
        • 2.2.1 创建
        • 2.2.2 新增操作
        • 2.2.3 查询操作
        • 2.2.4 删除操作
        • 2.2.5 遍历操作(核心+极简代码示例)
        • 2.2.6 基础属性操作
      • 2.3 补充知识点(新手必看)
    • 3. HashMap 核心知识点
      • 3.1 核心特性
      • 3.2 常用操作速记
        • 3.2.1 创建
        • 3.2.2 增/改操作
        • 3.2.3 查询操作
        • 3.2.4 删除操作
        • 3.2.5 遍历操作(核心+极简代码示例)
          • 3.2.5.1 方式1:entrySet 遍历(推荐,效率最高)
          • 3.2.5.2 方式2:keySet 遍历(效率稍低)
          • 3.2.5.3 方式3:values 遍历(仅需值时使用)
        • 3.2.6 基础属性操作
      • 3.3 补充知识点(新手必看)
    • 4. 核心对比与总结
      • 4.1 ArrayList vs HashSet 核心区别
      • 4.2 总核心总结

ArrayList、HashSet、HashMap 核心知识点+常用操作速记

整理 Java 中高频使用的 ArrayList(有序列表)、HashSet(无序不重复集合)、HashMap(键值对容器)核心特性与操作,新手可直接收藏,适配日常开发/面试场景。

1. ArrayList 核心知识点

1.1 核心特性

  • 存储结构:底层基于动态数组实现,支持动态扩容;
  • 顺序性:有序集合(元素顺序与插入顺序一致);
  • 重复性:允许存储重复元素、允许存储null元素;
  • 性能:查询快(通过索引直接访问,O(1))、增删慢(非尾部操作需移动元素,O(n));
  • 线程安全:非线程安全,多线程场景需使用CopyOnWriteArrayList

1.2 常用操作速记

1.2.1 创建
  • 核心逻辑:指定泛型约束元素类型,可初始化空列表或带初始容量的列表(减少扩容次数);
// 空列表ArrayList<String>list=newArrayList<>();// 指定初始容量(推荐:已知元素数量时使用,避免频繁扩容)ArrayList<Integer>numList=newArrayList<>(10);
1.2.2 增/改操作
方法功能说明
add(E)尾部添加元素(效率最高)
add(int index, E)指定索引位置插入元素(需移动后续元素,效率低)
set(int index, E)修改指定索引位置的元素(索引越界会抛IndexOutOfBoundsException
1.2.3 查询操作
方法功能说明
get(int index)根据索引获取元素(ArrayList 核心优势,直接访问)
contains(Object o)判断元素是否存在(遍历对比,效率随元素数量下降)
indexOf(Object o)返回元素首次出现的索引,不存在则返回 -1
lastIndexOf(Object o)返回元素最后一次出现的索引,不存在则返回 -1
1.2.4 删除操作
方法功能说明
remove(int index)根据索引删除元素(需移动后续元素),返回被删除的元素
remove(Object o)删除首次出现的指定元素,返回布尔值(是否删除成功)
1.2.5 遍历操作(核心+极简代码示例)

ArrayList 支持多种遍历方式,按需选择:

ArrayList<String>list=newArrayList<>();list.add("Java");list.add("Python");list.add("C++");// 方式1:普通for循环(需索引操作时使用,如遍历中删除元素)for(inti=0;i<list.size();i++){Stringelem=list.get(i);System.out.println("索引"+i+":"+elem);}// 方式2:增强for循环(最简洁,仅遍历不修改时使用)for(Stringelem:list){System.out.println(elem);}// 方式3:迭代器(遍历中安全删除元素,避免 ConcurrentModificationException)Iterator<String>iterator=list.iterator();while(iterator.hasNext()){Stringelem=iterator.next();if(elem.equals("Python")){iterator.remove();// 安全删除}}
1.2.6 基础属性操作
方法功能说明
size()获取列表中元素的总数量
clear()清空列表所有元素
isEmpty()判断列表是否为空,返回布尔值
trimToSize()缩容:将列表容量调整为当前元素数量,节省内存

1.3 补充知识点(新手必看)

  • 扩容机制:默认初始容量 10,满后扩容为原容量的 1.5 倍(JDK8+),扩容会复制数组,尽量提前指定初始容量;
  • 和数组的区别:数组容量固定,ArrayList 支持动态扩容;数组可存基本类型,ArrayList 仅存引用类型(需用包装类);
  • 遍历删除注意:增强 for 循环中直接调用remove()会抛异常,需用迭代器的remove()方法。

2. HashSet 核心知识点

2.1 核心特性

  • 存储结构:底层基于HashMap实现(元素作为 HashMap 的 Key,Value 固定为PRESENT常量);
  • 顺序性:无序集合(不保证插入/遍历顺序,也不保证顺序不变);
  • 重复性:不允许存储重复元素(重复添加会被忽略);
  • 特殊值:允许存储一个null元素;
  • 性能:增删查效率高(底层哈希表,O(1));
  • 线程安全:非线程安全,多线程场景需使用CopyOnWriteArraySet

2.2 常用操作速记

2.2.1 创建
  • 核心逻辑:指定泛型约束元素类型,初始化空集合(无初始容量重载,底层依赖 HashMap 默认容量);
HashSet<String>set=newHashSet<>();HashSet<Integer>numSet=newHashSet<>();
2.2.2 新增操作
方法功能说明
add(E)添加元素:元素不存在则添加成功(返回 true);重复则添加失败(返回 false)
2.2.3 查询操作
方法功能说明
contains(Object o)判断元素是否存在(底层调用 HashMap 的 containsKey,效率高)
无 get 方法!重点:HashSet 无索引,无法通过索引获取元素,这是和 ArrayList 的核心区别
2.2.4 删除操作
方法功能说明
remove(Object o)删除指定元素:存在则删除成功(返回 true);不存在则返回 false
2.2.5 遍历操作(核心+极简代码示例)

HashSet 无索引,仅支持“无索引遍历”:

HashSet<String>set=newHashSet<>();set.add("Apple");set.add("Banana");set.add("Orange");// 方式1:增强for循环(最常用)for(Stringelem:set){System.out.println(elem);}// 方式2:迭代器(遍历中安全删除元素)Iterator<String>iterator=set.iterator();while(iterator.hasNext()){Stringelem=iterator.next();if(elem.equals("Banana")){iterator.remove();// 安全删除}}
2.2.6 基础属性操作
方法功能说明
size()获取集合中元素的总数量
clear()清空集合所有元素
isEmpty()判断集合是否为空,返回布尔值

2.3 补充知识点(新手必看)

  • 去重原理:添加元素时,先调用元素的hashCode()计算哈希值,再调用equals()对比;两者都相同则判定为重复元素,添加失败;
  • 自定义对象去重:需重写hashCode()equals()方法,否则无法正确去重;
  • 和 HashMap 的关系:HashSet 是 HashMap 的“简化版”,仅使用了 HashMap 的 Key 部分,Value 是固定的空对象(节省内存)。

3. HashMap 核心知识点

3.1 核心特性

  1. 存储结构:以「键值对(Key-Value)」为基本单位存储数据;
  2. 唯一性:Key 具有唯一性(重复 Key 会覆盖原有值),Value 可重复;
  3. 特殊值支持:允许存储null键和null值;
  4. 顺序性:无序存储(不保证插入顺序与遍历顺序一致);
  5. 性能:底层基于哈希表实现,增删查操作理想时间复杂度为 O(1)。

3.2 常用操作速记

3.2.1 创建
  • 核心逻辑:声明时指定 Key/Value 的泛型类型,初始化空 HashMap;
  • 核心说明:泛型约束可避免后续类型转换异常,是基础规范。
3.2.2 增/改操作
方法功能说明
put(K, V)核心增改方法:Key 不存在则新增键值对;Key 已存在则覆盖原有 Value
putIfAbsent(K, V)安全新增:仅当 Key 不存在时才添加键值对,避免误覆盖已有值
3.2.3 查询操作
方法功能说明
get(K)根据 Key 取值:Key 存在返回对应 Value;不存在返回 null
getOrDefault(K, 默认值)安全取值:Key 不存在时返回指定默认值,避免空指针异常
containsKey(K)判断 Key 是否存在(效率高,基于哈希表查询)
containsValue(V)判断 Value 是否存在(效率低,需遍历所有值)
3.2.4 删除操作
  • 方法:remove(K)
  • 功能:根据 Key 删除对应的键值对,Key 不存在则无操作。
3.2.5 遍历操作(核心+极简代码示例)

遍历是 HashMap 高频操作,推荐优先使用entrySet方式,效率最高。

3.2.5.1 方式1:entrySet 遍历(推荐,效率最高)
  • 核心逻辑:直接获取所有键值对(Entry)集合,一次拿到 Key+Value,无需二次查询;
// 假设已初始化 HashMap<String, Integer> map = new HashMap<>();for(Map.Entry<String,Integer>entry:map.entrySet()){Stringkey=entry.getKey();// 获取键Integervalue=entry.getValue();// 获取值System.out.println(key+":"+value);// 业务逻辑示例}
3.2.5.2 方式2:keySet 遍历(效率稍低)
  • 核心逻辑:先获取所有 Key 集合,再通过 Key 逐个取值(需二次哈希查询);
// 假设已初始化 HashMap<String, Integer> map = new HashMap<>();for(Stringkey:map.keySet()){Integervalue=map.get(key);// 根据键取值System.out.println(key+":"+value);}
3.2.5.3 方式3:values 遍历(仅需值时使用)
  • 核心逻辑:直接获取所有 Value 集合,不关心 Key 时使用;
// 假设已初始化 HashMap<String, Integer> map = new HashMap<>();for(Integervalue:map.values()){System.out.println("值:"+value);}
3.2.6 基础属性操作
方法功能说明
size()获取 HashMap 中键值对的总数量
clear()清空 HashMap 中所有键值对,执行后集合为空
isEmpty()判断 HashMap 是否为空(无任何键值对),返回布尔值

3.3 补充知识点(新手必看)

  1. 线程安全:HashMap 是非线程安全的,多线程场景需使用ConcurrentHashMap
  2. Key 规范:作为 Key 的对象需正确重写hashCode()equals()方法,否则可能导致 Key 重复或查询失败;
  3. 空值处理:get()方法返回 null 时,优先使用getOrDefault()避免空指针异常。

4. 核心对比与总结

4.1 ArrayList vs HashSet 核心区别

维度ArrayListHashSet
底层结构动态数组基于 HashMap(哈希表)
顺序性有序(插入顺序)无序
重复性允许重复不允许重复
索引操作支持(get/set/remove(index))不支持(无索引)
核心优势按索引快速查询快速去重、增删查

4.2 总核心总结

  1. ArrayList 是“有序可重复列表”,核心优势是按索引快速访问,适合需频繁查询、允许重复元素的场景;
  2. HashSet 是“无序不重复集合”,核心优势是自动去重、增删查效率高,适合需去重、无需索引操作的场景;
  3. HashMap 是“无序键值对容器”,核心规则是 Key 唯一,遍历优先选 entrySet 以提升性能;
  4. 三者均非线程安全,多线程场景需使用对应的线程安全实现类(CopyOnWriteArrayList/CopyOnWriteArraySet/ConcurrentHashMap);
  5. 遍历删除元素时,推荐使用迭代器(Iterator)的remove()方法,避免并发修改异常。
http://www.jsqmd.com/news/526174/

相关文章:

  • CBLPRD-330k数据集实战:从平衡数据到高精度车牌识别模型
  • 2026年靠谱的蔬菜大棚膜公司推荐:高透光大棚膜/流滴消雾大棚膜直销厂家推荐 - 品牌宣传支持者
  • Qwen3-TTS-Tokenizer-12Hz应用案例:低带宽场景音频传输解决方案
  • DHUOJ 基础 52 53 54
  • SDRPlusPlus×铁路通信:信号解析实战指南的6个关键方法
  • 2026年评价高的大棚膜工厂推荐:农用大棚膜/抗老化大棚膜实力厂家推荐 - 品牌宣传支持者
  • LightOnOCR-2-1B在嵌入式Linux系统上的优化部署
  • 大麦抢票自动化系统进阶指南:双端策略与实战优化
  • Qwen3-4B-Thinking-2507-GPT-5-Codex-Distill-GGUF:5分钟快速部署,一键生成Postman测试集合
  • 2026广东商标设计全包优质服务商推荐指南:logo设计注册/公司logo设计/公司商标设计/农产品logo设计/选择指南 - 优质品牌商家
  • BIM 轻量化协同平台怎么选?广联达、协同大师、LumenBIM 怎么选?
  • GaussDB JDBC性能优化与生产环境实践
  • 【经验总结】出口安哥拉必须办理 CNCA 证书?和 ECTN 的区别一次说清
  • Grok-Beta 模型全维度解析:技术架构、能力验证与企业适配建议
  • YOLO X Layout多模型集成方案:精度提升15%的实战技巧
  • FireRed-OCR Studio惊艳效果:低质量模糊文档仍保持92%结构还原精度
  • 【实战】Windows系统C盘空间清理全攻略(免工具版)
  • No module named pkg_resources
  • 人脸识别模型实测:Retinaface+CurricularFace镜像效果到底有多强?
  • 监督学习中的分类方法
  • 使用STM32CubeMX配置工程并集成StructBERT文本相似度轻量引擎
  • Nanbeige 4.1-3B极简界面实测:丝滑流式输出,思考过程智能折叠
  • Qwen2.5-1.5B快速上手:侧边栏清空对话+GPU显存释放实操演示
  • 造相-Z-Image-Turbo LoRA 多视角生成:同一角色360度面部与姿态变化展示
  • 零基础玩转Live Avatar:阿里开源数字人模型保姆级教程
  • Kook Zimage真实幻想Turbo惊艳作品集:大师级质感幻想人像生成效果
  • MedGemma Medical Vision Lab效果展示:脊柱MRI矢状位影像中椎间盘突出程度的分级文本输出
  • 算法:动态规划基础(上):树型dfs+回溯+记忆化搜索
  • OpenClaw自动化测试:GLM-4.7-Flash驱动Python脚本执行与结果分析
  • Pixel Mind Decoder 开发环境搭建:Visual Studio Code配置与调试