Java集合常见面试题(一)

news2024/10/5 12:46:52

集合概述

Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素;另一个是 Map 接口,主要用于存放键值对。对于Collection 接口,下面又有三个主要的子接口:List、Set 和 Queue。

注意:Collection是一个接口,Collections是一个工具类,Map不是Collection的子接口。

Java 集合框架如下图所示:

在这里插入图片描述

在这里插入图片描述

List, Set, Queue, Map 四者的区别?

  • List(对付顺序的好帮手): 存储的元素是有序的、可重复的。
  • Set(注重独一无二的性质): 存储的元素是无序的、不可重复的。
  • Queue(实现排队功能的叫号机): 按特定的排队规则来确定先后顺序,存储的元素是有序的、可重复的。
  • Map(用 key 来搜索的专家): 使用键值对(key-value)存储,类似于数学上的函数 y=f(x),“x” 代表 key,“y” 代表 value,key 是无序的、不可重复的,value 是无序的、可重复的,每个键最多映射到一个值

集合框架底层数据结构总结

List

  • ArrayList: Object[] 数组;
  • Vector:Object[] 数组;
  • LinkedList: 双向链表(JDK1.6 之前为循环链表,JDK1.7 取消了循环)。

Set

  • HashSet(无序,唯一): 基于 HashMap 实现的,底层采用 HashMap 来保存元素;

  • LinkedHashSet: LinkedHashSet 是 HashSet 的子类,并且其内部是通过 LinkedHashMap 来实现的。有点类似于我们之前说的 LinkedHashMap 其内部是基于 HashMap 实现一样,不过还是有一点点区别的;

  • TreeSet(有序,唯一): 红黑树(自平衡的排序二叉树)。

Queue

  • PriorityQueue: Object[] 数组来实现二叉堆;

  • ArrayQueue: Object[] 数组 + 双指针。

Map

  • HashMap: JDK1.8 之前 HashMap 由数组+链表组成的,数组是 HashMap 的主体,链表则是主要为了解决哈希冲突而存在的(“拉链法”解决冲突)。JDK1.8 以后在解决哈希冲突时有了较大的变化,当链表长度大于阈值(默认为 8)(将链表转换成红黑树前会判断,如果当前数组的长度小于 64,那么会选择先进行数组扩容,而不是转换为红黑树)时,将链表转化为红黑树,以减少搜索时间;

  • LinkedHashMap: LinkedHashMap 继承自 HashMap,所以它的底层仍然是基于拉链式散列结构即由数组和链表或红黑树组成。另外,LinkedHashMap 在上面结构的基础上,增加了一条双向链表,使得上面的结构可以保持键值对的插入顺序。同时通过对链表进行相应的操作,实现了访问顺序相关逻辑。详细可以查看:《LinkedHashMap 源码详细分析(JDK1.8)》open in new windowHashtable: 数组+链表组成的,数组是 Hashtable 的主体,链表则是主要为了解决哈希冲突而存在的;

  • TreeMap: 红黑树(自平衡的排序二叉树)。

线程安全的集合有哪些?线程不安全的呢?

线程安全的

  1. Hashtable:比HashMap多了个线程安全。
  2. ConcurrentHashMap:是一种高效但是线程安全的集合。
  3. Vector:比Arraylist多了个同步化机制。
  4. Stack:栈,也是线程安全的,继承于Vector。

线性不安全的:

  1. HashMap
  2. Arraylist
  3. LinkedList
  4. HashSet
  5. TreeSet
  6. TreeMap

如何选用集合?

主要根据集合的特点来选用,比如我们需要根据键值获取到元素值时就选用 Map 接口下的集合,需要排序时选择 TreeMap,不需要排序时就选择 HashMap,需要保证线程安全就选用 ConcurrentHashMap。当我们只需要存放元素值时,就选择实现Collection 接口的集合,需要保证元素唯一时选择实现 Set 接口的集合比如 TreeSet 或 HashSet,不需要就选择实现 List 接口的比如 ArrayList 或 LinkedList,然后再根据实现这些接口的集合的特点来选用。

为什么要使用集合?

当我们需要保存一组类型相同的数据的时候,我们应该是用一个容器来保存,这个容器就是数组,但是,使用数组存储对象具有一定的弊端, 因为我们在实际开发中,存储的数据的类型是多种多样的,于是,就出现了“集合”,集合同样也是用来存储多个数据的。数组的缺点是一旦声明之后,长度就不可变了;同时,声明数组时的数据类型也决定了该数组存储的数据的类型;而且,数组存储的数据是有序的、可重复的,特点单一。 但是集合提高了数据存储的灵活性,Java 集合不仅可以用来存储不同类型不同数量的对象,还可以保存具有映射关系的数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/155017.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

HarmonyOS智能座舱体验是怎样炼成的?立即查看

目录 一、智能座舱的人因设计理念 1.驾驶场景“2s内安全交互” 2.屏幕信息科学布局 3.屏幕1:2比例特色分屏 二、如何对座舱应用高效设计开发 1.基础要求 2.开发禁止 3.更佳体验 1.音频类应用快速接入 2.手机服务卡片快速适配 三、软硬件联合打造优秀体验 1.小憩模式 2.K歌体验 …

RepVGG:让VGG风格的ConvNets再次伟大

论文地址:https://arxiv.org/abs/2101.03697 我们提出了一种简单但功能强大的卷积神经网络结构,该模型在推理时类似于VGG,只有33的卷积和ReLU堆叠而成,而训练时间模型具有多分支拓扑结构。训练时间和推理时间结构的这种解耦是通过…

李宏毅ML-局部最小值与鞍点

局部最小值与鞍点 文章目录局部最小值与鞍点1. Optimization 没有做好是因为什么?2. Local Minima or Saddle Point?3. 如何解决 Saddle Point?1. Optimization 没有做好是因为什么? 观察下图,随着 update 的次数增加&#xff0…

MFC或C/C++中如何判断目录存在,文件/文件夹存在,亦或是文件夹存在,文件存在

判断的方式太多太多,这里暂时列举5中方式。 在文章开始之前,由于需要用到CString转char功能,所以先介绍一个CString转char的方法: 想知道更多参见CString与char *互转总结 由于本文使用的Unicode编码模式,所以如下&…

链动2+1商业模式的玩法是怎么样的?

如果你感觉自己的产品卖不掉,很可能是因为缺乏一种成功业务模型,因此我们来聊聊运营商业运营模式理论:从一个销售产品到一个商业运营模式的高速发展,我们不能把它简单的当做是一种营销方法,也就是一种产品的营销方法。…

六、MySQL 数据库练习题1(包含前5章练习题目及答案)

文章目录一、数据库概述练习题二、MySQL 环境搭建练习题三、查询练习MySQL 数据库练习题(包含前5章所有知识点及答案) 前置知识: 一、数据库开发与实战专栏导学及数据库基础概念入门 二、MySQL 介绍及 MySQL 安装与配置 三、MySQL 数据库的基本操作 四、MySQL 存储…

PrimalSQL 2023 Crack

PrimalSQL 2023 使数据库查询开发和测试变得轻而易举,无论您的数据库类型或供应商如何。 通过单个工具支持多个数据库提供程序。 Access、SQL Server、SQL Server Compact、MySQL、Oracle、ODBC、OLEDB、Sybase 等。 使用Visual Query Builder构建复杂的查询。 使…

Steam/CSGO游戏搬砖1月行情分析及应对方法

Steam/CSGO游戏搬砖1月行情分析及应对方法 这几天,我看很多地方还在对外宣称说这个项目有百分之十几,二三十的利润率,多么无敌和暴利! 天啦 ,这些人为了能割到小白的韭菜真是无所不用其极,什么牛都能吹得出…

外包和外派

前言 简单介绍下人们常说的外包是什么,应届生未出社会没有经验,避免求职过程中的一些坑。 文章目录前言一、什么是外包?1、简介1、项目外包2、人力外包二、外包公司有哪些?三、优缺点1、优点2、缺点四、选择一、什么是外包&#x…

海思SS928V100开发(2)镜像烧录

1. 开发板没有uboot 在\01.software\pc\ToolPlatform下,打开烧写工具ToolPlatform如下: 选择 “烧写eMMC”,并添加fastboot,kernel,rootfs,如下图: 然后点击 烧写,进入烧写模式(注意:检查串口选择是否正确,传输方式选择 网口): 烧写完成uboot,kernel和rootf后的…

流媒体协议之RTMP详解

流媒体协议之RTMP详解 文章目录流媒体协议之RTMP详解1 RTMP概述2 RTMP交互过程2.1 握手协议2.2 RTMP分块(chunk)2.3 协议控制消息(Protocol Control Message)2.4 RTMP Message Format2.5 不同类型的RTMP Message2.6 RTMP Massage和…

【Linux多线程编程】7. 线程锁(4)——信号量

前言 上篇文章Linux多线程编程】6. 线程锁(3)——条件变量 介绍了使用条件变量实现多线程同步的方式,而条件变量一般与互斥锁一同配合。本文介绍多线程同步的另一种方式——信号量,使用比条件变量简单,也用来解决生产…

【Ansible】ansible Playbook

文章目录一、Ad-Hoc 的问题二、PlayBook 是什么三、YAML 学习1.yaml 特点2.基本语法四、 Playbook 的编写1.play 的定义2.Play 属性3.一个完整的剧本4. tasks 属性中任务的多种写法5.具有多个 play 的 playbook6. 如何对 playbook 进行语法校验下面校验的方法,只能校…

想要申请双软认证 这九大标准你满足吗

申请双软认证的优势有很多,最主要的就是能够节省企业的税收支出,减少成本,企业的利润就会增加,企业也能够发展得更好了。 要申请双软认证,企业就需要及时的了解双软认证的要求,不光是要有软件著作权&#…

编写jinjia2模板和角色部分 ansible(6)

目录 题目: 1、jinjia2模板: 编写hosts.j2,内容如下(主机名和ip地址使用变量): (1)Welcome to 主机名 !(比如servera.lab.example.com) My ip is ip地址. &#xff…

虹科新品 | 什么是光纤微动开关?(上)

01 什么是光纤微动开关 # 光纤微动开关结合了机械开关和光中断器的优点以及光纤波导的非金属性 光纤微动开关有一个确定的机械开关点,提供触觉反馈 光中断器没有电子机械部件,因此具有高可靠性 光纤是非金属的,它的信号损失几乎为零&#x…

苹果中国官网上线智能家居板块,蓝牙BLE在智能家居的应用

近期苹果中国区官网已上线单独的家居板块(Apple Home)。页面显示,家居板块主要分为三个品类:HomePod、Home App(家庭 App)以及智能家居配件。 据了解,智能家居单品均为第三方出品,虽…

OpenWrt 在没有80\443端口、不能dns验证的情况下为自己的域名申请免费ssl证书

适用范围 本方法适用于使用OpenWrt 在没有80\443端口、不能dns验证的情况下为自己的域名申请免费ssl证书。 提示: 1、如果你的网络的80或者443端口是开放状态,可直接使用https://letsencrypt.org/进行ssl申请,使用acme.sh脚本可快速完成。 2…

枚举类与注解

文章目录一、枚举类的使用枚举类的理解枚举类的定义Enum类的常用方法Enum类的实现接口二、注解(Annotation)说明如何自定义注解JDK提供的4种元注解通过反射获取注解信息(到反射再讲)JDK8注解的新特性每日一考一、枚举类的使用 枚…

Node.js教程笔记(二)模块化

学习目标 1、能够说出模块化的好处 2、能够知道CommonJS规定了哪些内容 3、能够说出NodeJS中模块的三大分类各是什么 4、能够使用npm管理包 5、能够了解什么是规范的包结构 6、能够了解模块的加载机制 目录 1、模块化的基本概念 2、NodeJS中模块的分类 3、npm与包 4…