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

JavaSE核心知识点03高级特性03-01(集合框架)

🤟致敬读者

  • 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉

📘博主相关

  • 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息

文章目录

    • JavaSE核心知识点03高级特性03-01(集合框架)
    • 一、什么是集合框架(Collection Framework)?
      • 为什么需要集合框架?
    • 二、集合框架的核心结构
      • 1. **Collection 接口(单列集合)**
      • 2. **Map 接口(双列集合)**
    • 三、核心接口详解与代码示例
      • 1. **List 接口**
        • 特点:有序、可重复、可通过索引访问
      • 2. **Set 接口**
        • 特点:无序、不可重复(通过`equals()`和`hashCode()`判断)
      • 3. **Map 接口**
        • 特点:键值对存储,Key唯一
    • 四、集合框架的通用操作
      • 1. **遍历集合**
      • 2. **集合工具类 `Collections`**
    • 五、如何选择集合类?
    • 六、常见面试问题
    • 七、学习路线建议


📃文章前言

  • 🔷文章均为学习工作中整理的笔记。
  • 🔶如有错误请指正,共同学习进步。

在这里插入图片描述

JavaSE核心知识点03高级特性03-01(集合框架)

作为Java集合框架的入门学习指南,我将从基础概念、核心接口、常用实现类、使用场景到代码示例,逐步为你讲解。内容会尽量通俗易懂,配有代码示例和对比表格,帮助你快速掌握。


一、什么是集合框架(Collection Framework)?

集合框架 是Java中用于存储和操作一组对象的统一架构。它提供了一套标准化的接口和实现类,解决了数组的局限性(如固定长度、类型单一、操作复杂等)。

为什么需要集合框架?

  • 动态扩容:无需手动管理容量
  • 类型安全:通过泛型确保数据类型一致
  • 高性能操作:提供丰富的API(增删改查、排序、遍历等)
  • 统一标准:所有集合类遵循相同的接口规范

二、集合框架的核心结构

Java集合框架主要分为两大类:单列集合(Collection)双列集合(Map)

1. Collection 接口(单列集合)

  • List:有序、可重复
    • 常用实现类:ArrayList, LinkedList, Vector
  • Set:无序、不可重复
    • 常用实现类:HashSet, LinkedHashSet, TreeSet
  • Queue:队列,先进先出(FIFO)
    • 常用实现类:LinkedList, PriorityQueue

2. Map 接口(双列集合)

  • 键值对(Key-Value)存储,Key不可重复
  • 常用实现类:HashMap, LinkedHashMap, TreeMap, Hashtable

三、核心接口详解与代码示例

1. List 接口

特点:有序、可重复、可通过索引访问

常用实现类对比

实现类数据结构特点
ArrayList动态数组查询快,增删慢(需扩容或移动元素)
LinkedList双向链表增删快,查询慢(需遍历节点)
Vector同步的动态数组线程安全,性能较低(已逐渐被淘汰)

示例代码

// ArrayList示例
List<String> arrayList = new ArrayList<>();
arrayList.add("Apple");
arrayList.add("Banana");
arrayList.add(1, "Orange"); // 在索引1插入元素
System.out.println(arrayList); // [Apple, Orange, Banana]// LinkedList示例
List<Integer> linkedList = new LinkedList<>();
linkedList.add(10);
linkedList.addFirst(5); // 头部插入
linkedList.addLast(20); // 尾部插入
System.out.println(linkedList.get(1)); // 10

2. Set 接口

特点:无序、不可重复(通过equals()hashCode()判断)

常用实现类对比

实现类数据结构特点
HashSet哈希表最快查询,无顺序
LinkedHashSet哈希表+链表保留插入顺序
TreeSet红黑树自然排序或自定义排序

示例代码

// HashSet示例
Set<String> hashSet = new HashSet<>();
hashSet.add("Java");
hashSet.add("Python");
hashSet.add("Java"); // 重复元素不会被添加
System.out.println(hashSet); // 输出顺序不确定,如 [Java, Python]// TreeSet示例(自然排序)
Set<Integer> treeSet = new TreeSet<>();
treeSet.add(5);
treeSet.add(2);
treeSet.add(8);
System.out.println(treeSet); // [2, 5, 8]

3. Map 接口

特点:键值对存储,Key唯一

常用实现类对比

实现类数据结构特点
HashMap哈希表最快查询,无顺序(允许null键值)
LinkedHashMap哈希表+链表保留插入顺序或访问顺序
TreeMap红黑树按键自然排序或自定义排序
Hashtable哈希表线程安全,不允许null键值(已过时)

示例代码

// HashMap示例
Map<String, Integer> hashMap = new HashMap<>();
hashMap.put("Alice", 25);
hashMap.put("Bob", 30);
hashMap.put("Alice", 26); // 覆盖原有值
System.out.println(hashMap.get("Bob")); // 30// TreeMap示例(按键排序)
Map<String, Integer> treeMap = new TreeMap<>();
treeMap.put("Orange", 5);
treeMap.put("Apple", 3);
System.out.println(treeMap); // {Apple=3, Orange=5}

四、集合框架的通用操作

1. 遍历集合

  • for-each循环(推荐):

    List<String> list = Arrays.asList("A", "B", "C");
    for (String s : list) {System.out.println(s);
    }
    
  • 迭代器(Iterator)

    Iterator<String> it = list.iterator();
    while(it.hasNext()) {String s = it.next();if (s.equals("B")) it.remove(); // 安全删除元素
    }
    

2. 集合工具类 Collections

提供静态方法操作集合:

List<Integer> numbers = new ArrayList<>(Arrays.asList(3,1,4,2));
Collections.sort(numbers); // 排序 → [1,2,3,4]
Collections.reverse(numbers); // 反转 → [4,3,2,1]
Collections.shuffle(numbers); // 随机打乱

五、如何选择集合类?

根据需求选择最合适的集合:

场景推荐实现类
快速随机访问ArrayList
频繁插入删除LinkedList
去重且无需排序HashSet
去重且保留插入顺序LinkedHashSet
需要排序TreeSetTreeMap
键值对存储HashMap(最常用)
线程安全场景ConcurrentHashMap

六、常见面试问题

  1. ArrayList和LinkedList的区别?

    • ArrayList基于动态数组,适合随机访问;LinkedList基于链表,适合频繁增删。
  2. HashMap的工作原理?

    • 通过哈希函数计算键的哈希值,存储到对应桶(数组位置),解决哈希冲突使用链表或红黑树(JDK8+)。
  3. 如何保证集合的线程安全?

    • 使用Collections.synchronizedList()包装,或选择ConcurrentHashMapCopyOnWriteArrayList等并发集合。

七、学习路线建议

  1. 基础阶段:掌握ArrayListHashMapHashSet的常用操作
  2. 进阶阶段:理解底层数据结构(如哈希表、红黑树)、泛型、迭代器
  3. 高级阶段:学习线程安全集合、性能优化、Stream API操作集合

练习建议

  • 实现一个简单的学生管理系统(用集合存储学生信息)
  • 统计一篇文章中每个单词出现的次数(用HashMap
  • 比较不同集合在10万次操作下的性能差异

如果有具体问题或需要更多代码示例,欢迎随时提问!



📜文末寄语

  • 🟠关注我,获取更多内容。
  • 🟡技术动态、实战教程、问题解决方案等内容持续更新中。
  • 🟢《全栈知识库》技术交流和分享社区,集结全栈各领域开发者,期待你的加入。
  • 🔵​加入开发者的《专属社群》,分享交流,技术之路不再孤独,一起变强。
  • 🟣点击下方名片获取更多内容🍭🍭🍭👇

相关文章:

  • docker镜像操作
  • 什么是Express
  • LeRobot 框架的开发指南 (上)
  • 垒球百科全书·棒球1号位
  • 精度不够?光纤激光尺0.2ppm误差解锁微米级制造
  • Alpha shapes算法边缘点进行排序(C++)
  • 日志分析-IIS日志分析
  • PTA刷题笔记2
  • 进考场!软考考试现场答题的注意事项
  • 列表集合字典推导式
  • 互联网大厂Java求职面试:云原生架构与AI应用集成解决方案
  • SkyWalking高频采集泄漏线程导致CPU满载排查思路
  • springboot配置mysql druid连接池,以及连接池参数解释
  • 系统架构设计师脑图
  • 【c++】: c++11线程库
  • 重读《人件》Peopleware -(12-1)Ⅱ 办公环境 Ⅴ 大脑时间与身体时间(上)
  • python实战:Python脚本后台运行的方法
  • Redis主从+哨兵+集群分片
  • 树莓派4B搭建Hector SLAM算法, ROS1 ROS2?
  • 短视频与直播场景下的美颜SDK优化方案:滤镜与特效如何平衡性能与美感?
  • 手机app客户端做网站/成都网站seo收费标准
  • 域名申请到网站建设教程/网络软文名词解释
  • 影视传媒网站源码/刷钻业务推广网站
  • 营销型企业网站诊断/seo技术教学视频
  • 新疆建设兵团职改办网站/seo产品推广
  • 做网站接广告赚钱么/百度快速收录3元一条