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

【数据结构前置知识】集合框架

什么是集合框架?

​集合框架​​ 是一个统一的、可扩展的体系结构,用于表示和操作​​集合​​。

简单来说:

  • ​集合​​:就是一个包含多个元素(对象)的容器,类似于一个“超级数组”。

  • ​框架​​:提供了一组预定义的接口(规定能做什么)、类(具体的实现)和算法(如何做),让你能够以标准、高效的方式来存储、检索、操作和传递一组对象。

​核心思想​​:​​面向接口编程​​。你写代码时,应该尽量依赖接口(如 List),而不是具体的实现类(如 ArrayList)。这样程序更灵活,易于维护和修改。


为什么需要集合框架?(解决的问题)

  1. ​替代传统数组的局限性​​:

    • 数组长度固定,而集合框架提供了动态扩容的容器(如 ArrayList)。

    • 数组只能通过下标访问,而集合提供了丰富的操作(如查找、排序、插入、删除)。

    • 数组可以存储基本类型和对象,而泛型集合主要存储对象(基本类型通过包装类)。

  2. ​提供统一的标准​​:在集合框架出现之前,程序员需要自己实现链表、栈、哈希表等数据结构。集合框架提供了一套标准、经过充分测试和优化的实现,提高了开发效率和代码质量。

  3. ​减少编程负担​​:你不需要再从零开始实现一个双向链表或一个红黑树,直接使用 LinkedListTreeMap即可。

  4. ​提高代码复用性和可维护性​​:基于接口的编程使得更换集合的实现非常容易(例如,今天用 ArrayList,明天发现需要频繁插入,可以轻松换成 LinkedList,而修改的代码很少)。


Java集合框架的体系结构(以Java为例,最经典)

Java的集合框架主要分为两大派系:

  1. Collection接口​​:存储单个对象的集合。

  2. Map接口​​:存储键值对(Key-Value)的集合。

下图清晰地展示了它们的关系:


核心接口详解

1. Collection 接口的三个主要子接口
  • List(列表/线性表)​​:

    • ​特点​​:​​有序、可重复​​。你可以精确控制每个元素的插入位置,并通过整数索引(类似数组下标)来访问元素。

    • ​常用实现类​​:

      • ArrayList:基于​​动态数组​​实现。​​查询快,增删慢​​。线程不安全。

      • LinkedList:基于​​双向链表​​实现。​​增删快,查询慢​​。还实现了 Deque(双端队列)接口。

      • Vector:古老的、线程安全的动态数组实现,现在已很少使用,通常用 Collections.synchronizedList代替。

  • Set(集合)​​:

    • ​特点​​:​​无序、不可重复​​。它更像数学中的集合,不关心顺序,只关心成员是否存在。

    • ​常用实现类​​:

      • HashSet:基于 HashMap实现,使用哈希表存储元素。​​查询速度极快​​。是最常用的Set。

      • LinkedHashSet:是 HashSet的子类,同时维护了一个运行于所有条目的双向链表。​​既保证了元素的唯一性,又维护了插入顺序​​。

      • TreeSet:基于 TreeMap(红黑树)实现。元素会按照自然顺序或者自定义比较器进行​​排序​​。

  • Queue(队列)​​:

    • ​特点​​:用于模拟队列这种数据结构,通常遵循FIFO(先进先出)规则。

    • ​常用实现类​​:

      • LinkedList:也实现了 Queue接口。

      • PriorityQueue:优先级队列,元素按其自然顺序或比较器顺序出队。

2. Map 接口
  • ​特点​​:存储​​键值对​​,​​Key不可重复,每个Key最多映射到一个Value​​。

  • ​常用实现类​​:

    • HashMap:基于哈希表实现。允许使用 null作为 key 或 value。​​存取效率最高​​。是最常用的Map。

    • LinkedHashMap:类似于 LinkedHashSet,维护了插入顺序或访问顺序。

    • TreeMap:基于红黑树实现。Key会被排序。

    • Hashtable:古老的、线程安全的实现,不允许 null键值,现在已很少使用,通常用 ConcurrentHashMap代替。

http://www.dtcms.com/a/403870.html

相关文章:

  • 度学习中的关键工具与数据处理方法
  • 网站制作案例策划洛阳百事通文化传播有限公司
  • 大模型微调——LoRA微调
  • Mysql常用调优参数
  • MySQL 概述及其在 C/C++ 开发中的应用价值
  • 新乡手机网站建设电话wordpress rest post
  • OpenAI与 Nvidia合作意味着什么
  • 做淘宝详情页好的网站wordpress制作lp
  • Maven-继承与聚合
  • 中国建设银行淮南分行网站设计官网的
  • 如何分析软件需求中的DFX需求?
  • 网站开发需求分析参考文献软件市场下载
  • MySQL笔记---对数据库(database)的操作
  • 文创网站江西合创建设工程有限公司 网站
  • 【Leetcode hot 100】124.二叉树中的最大路径和
  • 仙桃做网站找谁优化大师怎么卸载
  • 网站用户模板做网站需要的东西
  • 自定义类型之联合体、枚举
  • 计算机——信息素养和信息安全
  • php 整个网站变量实惠的制作网站
  • 不同路劲 III dfs解决
  • 海沧网站建设如何做好网站首页
  • PHP女程序猿学习Java的Day-12
  • 电商运营如何提升自身技能素质?
  • 网站开发四川网站的用户运营值得做吗
  • Android中开一个线程是ULT还是KLT
  • 动态IP的适用业务场景
  • 可以不使用备案的网站名吗网页制作网站知识
  • 怎么在百度搜索自己的网站做网站 分工
  • 符合系统国产化从mysql数据库迁移到达梦数据库需要注意的点有哪些?