Java 集合 Collection常考面试题
理解集合体系图
collection中 list 是有序的,set 是无序的

什么是迭代器
主要遍历 Collection 集合中的元素,所有实现了 Collection 的集合类都有一个iterator()方法,可以返回一个 iterator 的迭代器。
ArrayList 和 Vector 的区别?
ArrayList 可以存放 null,底层是由数组实现的。
主要区别在于两者的线程安全性和性能。Vector 是同步的,因此它是线程安全的,但这使得它在多线程环境中相对于 ArrayList 来说性能较低。ArrayList 是非同步的,因此不是线程安全的,但它在单线程环境中提供更好的性能。
关于同步和异步的安全问题
同步操作在多线程程序中经常与“线程安全”这个词联系在一起,主要是因为同步机制(如互斥锁、信号量等)确保在同一时间只有一个线程可以访问某个特定的资源或执行某个特定的代码段。这种方式可以防止多个线程同时改变共享数据的状态,从而避免了竞态条件和数据不一致的问题。
异步操作本身并不自动提供线程安全保证。事实上,由于异步操作经常在不同的线程或执行环境中启动或完成,如果不采取适当的措施,就可能引发线程安全问题。
此外,Vector 默认情况下容量增长为当前的两倍,而 ArrayList 增长为原来的 1.5 倍。
关于容量增长问题
"容量增长为当前的两倍"这个表述是指集合(如
Vector)在元素添加过程中,当现有的存储空间不足以容纳更多元素时,集合会自动扩展其内部数据结构的容量。对于Vector来说,这意味着如果其内部数组已满,它会创建一个新的数组,其容量是原数组容量的两倍,然后将所有旧元素复制到这个新数组中。这里是一个具体的例子来说明这个过程:
- 假设
Vector的当前容量是 10(即它可以存储 10 个元素)。- 当你尝试添加第 11 个元素时,
Vector会检测到容量不足。- 于是,
Vector会分配一个新的数组,其容量是之前的两倍,即 20。Vector将原有的 10 个元素复制到这个新的数组中,并添加新元素。这种自动扩容机制确保了集合可以根据需要动态地增长,以容纳更多的元素。与
Vector不同的是,ArrayList在扩容时通常采用将容量增长为原来的 1.5 倍,这也是一种权衡性能和内存使用的策略。通过选择不同的增长因子,不同的集合类可以提供不同的性能特点:
- Vector 的容量增长为两倍,意味着它在扩容时可能会更快地增加其内存使用,但减少了扩容操作的频率。
- ArrayList 的容量增长为 1.5 倍,则是在增加容量和减少内存浪费之间找到一个中间值。
由于这些特性,通常推荐在单线程应用中使用 ArrayList(因为更快,而且不用考虑安全性的问题),在需要线程安全的环境中使用 Vector。
ArrayList和LinkedList的区别?
"
ArrayList和LinkedList都实现了 Java 的List接口,但他们的内部数据结构和性能特点有所不同。
ArrayList 是基于动态数组的实现,它支持快速的随机访问和低成本的访问操作。然而,向列表中间插入和删除元素的操作可能会比较慢,因为这涉及到数组的复制和移动元素。
LinkedList 是基于双向链表的实现,它允许在列表中进行快速的插入和删除操作,尤其是在列表的开头和结尾,或者已知特定节点的情况下。但是,与
ArrayList相比,LinkedList的随机访问速度较慢,因为需要从头节点或尾节点开始遍历链表。总的来说,如果你需要频繁的随机访问,应选择
ArrayList;如果你的应用需求更频繁地在列表中插入或删除元素,LinkedList可能是更好的选择。"
HashMap与HashTable的区别?
"
HashMap和HashTable都是 Java 中的集合类,用于存储键值对,但它们在实现和使用中有几个关键区别:
同步性:
HashMap是非同步的。HashTable是同步的。空值支持:
HashMap允许一个 null 键和多个 null 值。HashTable不允许键或值为 null,尝试插入 null 键或值会抛出NullPointerException。迭代器&
相关文章:
Java 集合 Collection常考面试题
理解集合体系图 collection中 list 是有序的,set 是无序的 什么是迭代器 主要遍历 Collection 集合中的元素,所有实现了 Collection 的集合类都有一个iterator()方法,可以返回一个 iterator 的迭代器。 ArrayList 和 Vector 的区别? ArrayList 可以存放 null,底层是由数…...
C++继承与菱形继承(一文了解全部继承相关基础知识和面试点!)
目的减少重复代码冗余 Class 子类(派生类) : 继承方式 父类(基类) 继承方式共有三种:公共、保护、私有 父类的私有成员private无论哪种继承方式都不可以被子类使用 保护protected权限的内容在类内是可以访问,但是在…...
谷歌DeepMind 德米斯·哈萨比斯 因蛋白质预测AI荣获诺贝尔化学奖
2024年诺贝尔化学奖的一半授予了谷歌DeepMind的联合创始人兼首席执行官德米斯哈萨比斯和公司总监约翰M朱姆珀,以表彰他们在利用人工智能预测蛋白质结构方面的研究成果。另一半奖项则授予华盛顿大学生物化学教授大卫贝克,以表彰他在计算蛋白质设计领域的贡…...
内网笔记大全
内网笔记大全 1、基础命令 Windows 1、net user #查看用户 2、net view #查看在线主机 3、systeminfo #查看操作系统的基本配置 4、ipconfig /all #详细显示当前网络配置信息和网卡信息 5、net localgroup #查看本地组信息 6、net localgroup administrators #查看管理员组 7、…...
peft.LoraConfig()参数说明
LoraConfig()介绍 LoraConfig()是peft库中的一个配置类,用于设置大模型微调方法LoRA(Low-Rank Adaptation)的相关参数。PEFT 库为各种参数高效的微调方法(如 LoRA)提供了封装,以减少微调大模型时的计算资源…...
串口(UART)的FPGA设计(接收与发送模块)
目录 串口基础知识 一、什么是串口?有哪些特点? 二、常见的串口通信协议有哪些?他们有什么区别?...
JSON 格式化工具:快速便捷地格式化和查看 JSON 数据
JSON 格式化工具:快速便捷地格式化和查看 JSON 数据 为什么需要 JSON 格式化工具? 在日常开发和调试中,JSON 是非常常见的数据交换格式。无论是前端与后端的接口调用,还是数据存储和处理,JSON 格式都扮演着重要角色。…...
【星汇极客】STM32 HAL库各种模块开发之1.8TFT屏幕
前言 本人是一名嵌入式学习者,在大学期间也参加了不少的竞赛并获奖,包括:江苏省电子设计竞赛省一、睿抗机器人国二、中国高校智能机器人国二、嵌入式设计竞赛国三、光电设计竞赛国三、节能减排竞赛国三等。 暑假的时候参加了太多的比赛&#…...
Excel中使用SQL语句的四种方法
总结在 Excel 中使用 SQL 语句的四种方法,各种方法都有各自的适用场景,可以选择自己熟悉的或喜欢方式。本文以在 Excel 中操作 MS SQL 数据库的数据为例进行说明。MS SQL 的数据如下,使用微软 SQLExpress 版本。 方法 1: Excel 现…...
目标检测中的损失函数
损失函数是用来衡量模型与数据的匹配程度的,也是模型权重更新的基础。计算损失产生模型权重的梯度,随后通过反向传播算法,模型权重得以更新进而更好地适应数据。一般情况下,目标损失函数包含两部分损失,一个是目标框分…...
list库实现
list库实现的要点: 构建list类时,需要同时构建struct Node来存储节点信息,list类中只存储哨兵位节点信息,迭代器类需要template<T,Ptr,Ref>来构建const和非const迭代器,迭代器中也是存储节点信息。反向迭代器也…...
MFC工控项目实例二十三模拟量输入设置界面
承接专栏《MFC工控项目实例二十二主界面计数背景颜色改变》 1、在SenSet.h文件中添加代码 #include "BtnST.h" #include "ShadeButtonST.h"/ // SenSet dialogclass SenSet : public CDialog { // Construction public:SenSet(CWnd* pParent NULL); //…...
排序算法总结(三)希尔排序
访问www.tomcoding.com网站,学习Oracle内部数据结构,详细文档说明,下载Oracle的exp/imp,DUL,logminer,ASM工具的源代码,学习高技术含量的内容。 如果你在网上搜一下希尔排序,都会告…...
如何迁移 Linux 服务器 第一部分 - 系统准备
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 简介 在许多情况下,您可能需要将数据和操作需求从一个服务器迁移到另一个服务器。您可能需要在新的数据中心实施解决方案&a…...
网络IO模型都有哪些
“网络IO模型有BIO、NIO、AIO ” “他们分别代表什么,有什么区别吗? BIO:同步阻塞IO。 NIO:同步非阻塞IO。 AIO:异步非阻塞IO。 “BIO为什么是同步阻塞IO,他阻塞的是谁跟谁之间的关联?”。 首先…...
数据结构: 数组在算法中的应用
数组是计算机科学中的一种基础数据结构,它在算法中有着广泛的应用,其关键要素是索引与索引对应的值。 请注意,这些代码示例需要适当的辅助函数(如 swap )和主函数来运行。此外,一些算法(如KMP算…...
js快速转换时间(时间戳转换成年月日时分秒)
1:js转换 1728270833000 转换为 2024-10-07 11:13:53 var date new Date(1728270833000); // 参数需要毫秒数,所以这里将秒数乘于 1000 Y date.getFullYear() -; M (date.getMonth()1 < 10 ? 0(date.getMonth()1) : date.getMonth()1) -; D…...
LeetCode15.三数之和
题目链接:15. 三数之和 - 力扣(LeetCode) 1.常规解法(会超时) 由于这道题需要排除相同的三元组,则可以先将目标数组从小到大排序,再遍历数组找到每个符合条件的三元组,若结果中不包…...
SpringBoot3.3 优雅启停定时任务
定时任务是非常常见的功能,在一个复杂的应用程序中,如何优雅地管理这些定时任务的启动与停止尤为重要。 Spring Boot 提供了强大的任务调度支持,通过@Scheduled注解可以轻松地创建定时任务,并且可以通过配置来灵活地管理这些任务的执行环境。在本文中,我们将深入探讨如何…...
数据结构之二叉搜索树(key模型与key_value模型)
二叉搜索树(key模型与key_value模型) 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3. ⼆叉搜索树的插⼊4. ⼆叉搜索树的查找5. ⼆叉搜索树的删除6. ⼆叉搜索树的实现代码7. ⼆叉搜索树key和key/value使⽤场景7.1 key搜索场景:7.2 key/value搜…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
大数据零基础学习day1之环境准备和大数据初步理解
学习大数据会使用到多台Linux服务器。 一、环境准备 1、VMware 基于VMware构建Linux虚拟机 是大数据从业者或者IT从业者的必备技能之一也是成本低廉的方案 所以VMware虚拟机方案是必须要学习的。 (1)设置网关 打开VMware虚拟机,点击编辑…...
全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
Java 加密常用的各种算法及其选择
在数字化时代,数据安全至关重要,Java 作为广泛应用的编程语言,提供了丰富的加密算法来保障数据的保密性、完整性和真实性。了解这些常用加密算法及其适用场景,有助于开发者在不同的业务需求中做出正确的选择。 一、对称加密算法…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...
如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...
【HarmonyOS 5 开发速记】如何获取用户信息(头像/昵称/手机号)
1.获取 authorizationCode: 2.利用 authorizationCode 获取 accessToken:文档中心 3.获取手机:文档中心 4.获取昵称头像:文档中心 首先创建 request 若要获取手机号,scope必填 phone,permissions 必填 …...
代理篇12|深入理解 Vite中的Proxy接口代理配置
在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...
