当前位置: 首页 > 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万次操作下的性能差异

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



📜文末寄语

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

http://www.xdnf.cn/news/618481.html

相关文章:

  • AbMole| MG132(133407-82-6,M1902,蛋白酶体抑制剂)
  • 西北某县智慧水务系统新升级:能预判·会听话·秒响应的智能“水管家”上岗
  • 探索常识性概念图谱:构建智能生活的知识桥梁
  • YOLOv4论文超详细精讲(翻译+学习笔记)
  • 文章记单词 | 第112篇(六级)
  • Flask框架全方位深度解析
  • Python |GIF 解析与构建(2):状态机解析
  • 2000-2023年各地级市进出口总额/地级市对外经济贸易数据
  • queue和priority_queue及其函数
  • ld: cpu type/subtype in slice (arm64e.old) does not match fat header (arm64e)
  • mysql连接池druid监控配置
  • 2025年工会考试题库及答案
  • MyBatis 中 parameterType 属性
  • AutoCAD Electrical 自定义多极元件
  • 反本能---如何对抗你的习以为常
  • 二分算法(灵神边界处理复习)
  • 电子电路:能认为电抗也是在做功吗?
  • 软件测试(4) 白盒测试
  • 归一化与标准化
  • 频率分布直方图
  • halcon初始
  • 深度剖析并发I/O模型select、poll、epoll与IOCP核心机制
  • 计算机组成原理-基本运算部件定点数的运算
  • 【安全攻防与漏洞​】​​Heartbleed漏洞复现与修复
  • 【JS】vue3具名导出与默认导出
  • [Asp.Net]GridView导出Excel长数字显示成科学计数
  • Spring Boot 项目多数据源配置【dynamic datasource】
  • C++进阶--c++11(02)
  • 【算法】: 前缀和算法(利用o(1)的时间复杂度快速求区间和)
  • 全球复合铁路枕木市场深度分析:技术革新与区域增长潜力(2024-2031)