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

一文回顾讲解Java中的集合框架

这篇文章以提问的方式总结回顾下Java中常见的集合框架

  • Java中的集合框架可以分为两条大的支线:Collection和Map

    • Collection,主要由List、Set、Queue组成;
      • List是有序,可重复的集合,典型代表有封装了动态数组的ArrayList和封装了链表的LinkedList
      • Set是无序,不可重复的,典型代表有HashSet和TreeSet
      • Queue代表队列,典型代表就是双端队列ArrayQueue以及优先级队列PriorityQueue
    • Map代表键值对的集合,典型代表就是HashMap;
      在这里插入图片描述
      ①、Collection 接口:最基本的集合框架表示方式,提供了添加、删除、清空等基本操作,它主要有三个子接口:
  • List:一个有序的集合,可以包含重复的元素。实现类包括 ArrayList、LinkedList 等。

  • Set:一个不包含重复元素的集合。实现类包括 HashSet、LinkedHashSet、TreeSet 等。

  • Queue:一个用于保持元素队列的集合。实现类包括 PriorityQueue、ArrayDeque 等。

②、Map 接口:表示键值对的集合,一个键映射到一个值。键不能重复,每个键只能对应一个值。Map 接口的实现类包括 HashMap、LinkedHashMap、TreeMap 等。

  • 集合框架是位于java.util包下,这个包提供了两个常用的工具类:
    • Collections:提供一些对集合排序、二分查找、同步的静态方法
    • Arrays:提供了一些对数组进行排序、打印和List进行转换的静态方法;

简单介绍一下队列Queue

  • Java中的队列主要通过java.util.Queue接口和java.util.concurrent.BlockingQueue两个接口来实现;

  • PriorityQueue是一个基于优先级堆的无界队列,它的元素按照自然顺序排列或者Comparator进行排序;
    在这里插入图片描述

  • ArrayDeq ue是一个基于数组的双端队列,可以在两端插入和删除元素;
    在这里插入图片描述
    接下来,讲一下我常用的一些集合,以及它们各自的优劣

  • 在Java中,常见的集合有ArrayList、LinkedList、HashMap、LinkedHashMap等

    1. ArrayList:ArrayList 可以看作是一个动态数组,它可以在运行时动态扩容。优点是访问速度快,可以通过索引直接查到元素。缺点是插入和删除元素可能需要移动元素,效率就会降低。
    2. LinkedList:LinkedList 是一个双向链表,它适合频繁的插入和删除操作。优点是插入和删除元素的时候只需要改变节点的前后指针,缺点是访问元素时需要遍历链表。
    3. HashMap:HashMap 是一个基于哈希表的键值对集合。优点是插入、删除和查找元素的速度都很快。缺点是它不保留键值对的插入顺序。
    4. LinkedHashMap:LinkedHashMap 在 HashMap 的基础上增加了一个双向链表来保持键值对的插入顺序。

队列和栈的区别了解吗?

  • 队列是一种先进先出(FIFO, First-In-First-Out)的数据结构。在队列中,第一个加入队列的元素会是第一个被移除的。队列常用于处理按顺序来的任务。
  • 栈是一种后进先出(LIFO, Last-In-First-Out)的数据结构。在这种结构中,最后一个加入栈的元素会是第一个被移除的。这种特性使得栈非常适合于那些需要访问最新添加的数据元素的场合。

哪些是线程安全的?

  • 像Vector、HashMap、ConcurrentHashMap、CopyOnWriteArrayList、ConcurrentLinkedQueue、ArrayBlockingQueue、LinkedBlockingQueue 这些都是线程安全的。

Java集合用过哪些?

  • 我最经常用的就是封装了动态数组的ArrayList和封装了链表的LinkedList;以及键值对HashMap;

Collection继承了哪些接口?

  • Collection继承了iterable接口,这意味着所有实现了Collection接口的类都必须实现iterator()方法,之后就可以使用增强for循环遍历集合中的元素了;
http://www.lryc.cn/news/529491.html

相关文章:

  • 多模态论文笔记——NaViT
  • 智能小区物业管理系统推动数字化转型与提升用户居住体验
  • I2C基础知识
  • 护眼好帮手:Windows显示器调节工具
  • MongoDb user自定义 role 添加 action(collStats, EstimateDocumentCount)
  • mysql学习笔记-数据库其他调优策略
  • Office / WPS 公式、Mathtype 公式输入花体字、空心字
  • (done) MIT6.S081 2023 学习笔记 (Day6: LAB5 COW Fork)
  • SYN Flooding的攻击原理
  • MYSQL--一条SQL执行的流程,分析MYSQL的架构
  • cmd命令行无法进入D:盘怎么办
  • CRC校验详解
  • windows系统本地部署deepseek及webui界面
  • (算法竞赛)使用广度优先搜索(BFS)解决迷宫最短路径问题
  • Sqoop源码修改:增加落地HDFS文件数与MapTask数量一致性检查
  • 嵌入式系统|DMA和SPI
  • leetcode——将有序数组转化为二叉搜索树(java)
  • 冯诺依曼结构和进程概念及其相关的内容的简单介绍
  • Native Memory Tracking 与 RSS的差异问题
  • 在K8s中部署动态nfs存储provisioner
  • 家庭财务管理系统的设计与实现
  • 数据结构-Stack和栈
  • 使用vhd虚拟磁盘安装两个win10系统
  • 代码随想录34 动态规划
  • 【2025年最新版】Java JDK安装、环境配置教程 (图文非常详细)
  • Shell特殊状态变量以及常用内置变量总结
  • 【4Day创客实践入门教程】Day4 迈向高手之路——进一步学习!
  • EtherCAT-快速搭建
  • 【设计测试用例自动化测试性能测试 实战篇】
  • DBeaver连接MySQL提示Access denied for user ‘‘@‘ip‘ (using password: YES)的解决方法