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

Java 集合 Collection常考面试题

理解集合体系图

collection中 list 是有序的,set 是无序的

什么是迭代器

主要遍历 Collection 集合中的元素,所有实现了 Collection 的集合类都有一个iterator()方法,可以返回一个 iterator 的迭代器。

ArrayList 和 Vector 的区别?

ArrayList 可以存放 null,底层是由数组实现的。

主要区别在于两者的线程安全性和性能。Vector 是同步的,因此它是线程安全的,但这使得它在多线程环境中相对于 ArrayList 来说性能较低。ArrayList 是非同步的,因此不是线程安全的,但它在单线程环境中提供更好的性能。

关于同步和异步的安全问题

同步操作在多线程程序中经常与“线程安全”这个词联系在一起,主要是因为同步机制(如互斥锁、信号量等)确保在同一时间只有一个线程可以访问某个特定的资源或执行某个特定的代码段。这种方式可以防止多个线程同时改变共享数据的状态,从而避免了竞态条件和数据不一致的问题。

异步操作本身并不自动提供线程安全保证。事实上,由于异步操作经常在不同的线程或执行环境中启动或完成,如果不采取适当的措施,就可能引发线程安全问题。

此外,Vector 默认情况下容量增长为当前的两倍,而 ArrayList 增长为原来的 1.5 倍。

关于容量增长问题

"容量增长为当前的两倍"这个表述是指集合(如 Vector)在元素添加过程中,当现有的存储空间不足以容纳更多元素时,集合会自动扩展其内部数据结构的容量。对于 Vector 来说,这意味着如果其内部数组已满,它会创建一个新的数组,其容量是原数组容量的两倍,然后将所有旧元素复制到这个新数组中。

这里是一个具体的例子来说明这个过程:

  1. 假设 Vector 的当前容量是 10(即它可以存储 10 个元素)。
  2. 当你尝试添加第 11 个元素时,Vector 会检测到容量不足。
  3. 于是,Vector 会分配一个新的数组,其容量是之前的两倍,即 20。
  4. Vector 将原有的 10 个元素复制到这个新的数组中,并添加新元素。

这种自动扩容机制确保了集合可以根据需要动态地增长,以容纳更多的元素。与 Vector 不同的是,ArrayList 在扩容时通常采用将容量增长为原来的 1.5 倍,这也是一种权衡性能和内存使用的策略。通过选择不同的增长因子,不同的集合类可以提供不同的性能特点:

  • Vector 的容量增长为两倍,意味着它在扩容时可能会更快地增加其内存使用,但减少了扩容操作的频率。
  • ArrayList 的容量增长为 1.5 倍,则是在增加容量和减少内存浪费之间找到一个中间值。

由于这些特性,通常推荐在单线程应用中使用 ArrayList(因为更快,而且不用考虑安全性的问题),在需要线程安全的环境中使用 Vector。

ArrayList和LinkedList的区别?

"ArrayListLinkedList 都实现了 Java 的 List 接口,但他们的内部数据结构和性能特点有所不同。

  • ArrayList 是基于动态数组的实现,它支持快速的随机访问和低成本的访问操作。然而,向列表中间插入和删除元素的操作可能会比较慢,因为这涉及到数组的复制和移动元素。

  • LinkedList 是基于双向链表的实现,它允许在列表中进行快速的插入和删除操作,尤其是在列表的开头和结尾,或者已知特定节点的情况下。但是,与 ArrayList 相比,LinkedList 的随机访问速度较慢,因为需要从头节点或尾节点开始遍历链表。

总的来说,如果你需要频繁的随机访问,应选择 ArrayList;如果你的应用需求更频繁地在列表中插入或删除元素,LinkedList 可能是更好的选择。"

HashMap与HashTable的区别?

"HashMapHashTable 都是 Java 中的集合类,用于存储键值对,但它们在实现和使用中有几个关键区别:

  1. 同步性

    • HashMap 是非同步的。
    • HashTable 是同步的。
  2. 空值支持

    • HashMap 允许一个 null 键和多个 null 值。
    • HashTable 不允许键或值为 null,尝试插入 null 键或值会抛出 NullPointerException
  3. 迭代器&

相关文章:

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库实现的要点&#xff1a; 构建list类时&#xff0c;需要同时构建struct Node来存储节点信息&#xff0c;list类中只存储哨兵位节点信息&#xff0c;迭代器类需要template<T,Ptr,Ref>来构建const和非const迭代器&#xff0c;迭代器中也是存储节点信息。反向迭代器也…...

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网站&#xff0c;学习Oracle内部数据结构&#xff0c;详细文档说明&#xff0c;下载Oracle的exp/imp&#xff0c;DUL&#xff0c;logminer&#xff0c;ASM工具的源代码&#xff0c;学习高技术含量的内容。 如果你在网上搜一下希尔排序&#xff0c;都会告…...

如何迁移 Linux 服务器 第一部分 - 系统准备

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 简介 在许多情况下&#xff0c;您可能需要将数据和操作需求从一个服务器迁移到另一个服务器。您可能需要在新的数据中心实施解决方案&a…...

网络IO模型都有哪些

“网络IO模型有BIO、NIO、AIO ” “他们分别代表什么&#xff0c;有什么区别吗&#xff1f; BIO&#xff1a;同步阻塞IO。 NIO&#xff1a;同步非阻塞IO。 AIO&#xff1a;异步非阻塞IO。 “BIO为什么是同步阻塞IO&#xff0c;他阻塞的是谁跟谁之间的关联&#xff1f;”。 首先…...

数据结构: 数组在算法中的应用

数组是计算机科学中的一种基础数据结构&#xff0c;它在算法中有着广泛的应用&#xff0c;其关键要素是索引与索引对应的值。 请注意&#xff0c;这些代码示例需要适当的辅助函数&#xff08;如 swap &#xff09;和主函数来运行。此外&#xff0c;一些算法&#xff08;如KMP算…...

js快速转换时间(时间戳转换成年月日时分秒)

1&#xff1a;js转换 1728270833000 转换为 2024-10-07 11:13:53 var date new Date(1728270833000); // 参数需要毫秒数&#xff0c;所以这里将秒数乘于 1000 Y date.getFullYear() -; M (date.getMonth()1 < 10 ? 0(date.getMonth()1) : date.getMonth()1) -; D…...

LeetCode15.三数之和

题目链接&#xff1a;15. 三数之和 - 力扣&#xff08;LeetCode&#xff09; 1.常规解法&#xff08;会超时&#xff09; 由于这道题需要排除相同的三元组&#xff0c;则可以先将目标数组从小到大排序&#xff0c;再遍历数组找到每个符合条件的三元组&#xff0c;若结果中不包…...

SpringBoot3.3 优雅启停定时任务

定时任务是非常常见的功能,在一个复杂的应用程序中,如何优雅地管理这些定时任务的启动与停止尤为重要。 Spring Boot 提供了强大的任务调度支持,通过@Scheduled注解可以轻松地创建定时任务,并且可以通过配置来灵活地管理这些任务的执行环境。在本文中,我们将深入探讨如何…...

数据结构之二叉搜索树(key模型与key_value模型)

二叉搜索树&#xff08;key模型与key_value模型&#xff09; 1. ⼆叉搜索树的概念2. ⼆叉搜索树的性能分析3. ⼆叉搜索树的插⼊4. ⼆叉搜索树的查找5. ⼆叉搜索树的删除6. ⼆叉搜索树的实现代码7. ⼆叉搜索树key和key/value使⽤场景7.1 key搜索场景&#xff1a;7.2 key/value搜…...

图说几何学2300年重大错误:附着在直线z上的直线段必是z的一部分

黄小宁 用泡沫塑料和油漆制成的铅球与真正的铅球&#xff0c;两者有不同的内部形状。同样&#xff0c;数学有长度相同但内部形状不同的伪≌直线段。 几何学有史2300年来一直认定附着在直线z上的直线段一定是z的一部分。其实这是2300年肉眼直观错觉——百年病态集论的症结。 …...

汽车网关(GW)技术分析

一、引言 在现代汽车电子系统中&#xff0c;汽车网关&#xff08;Gateway&#xff0c;简称 GW&#xff09;扮演着至关重要的角色。随着汽车电子技术的不断发展&#xff0c;汽车内部的电子控制单元&#xff08;Electronic Control Unit&#xff0c;简称 ECU&#xff09;数量不断…...

Telnet命令详解:安装、用法及应用场景解析

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storm…...

C++之LIST模拟实现(代码纯享版)

目录 文章目录 前言 一、代码 总结 前言 本文主要展示了模拟List的代码实现 一、代码 #pragma once #include<iostream> #include<assert.h> using namespace std; namespace zlh {template<class T>struct list_node{T _data;list_node<T>* _next;l…...

华为OD机试 - 括号匹配 - 栈(Python/JS/C/C++ 2024 E卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…...

打破欧美10年芯片垄断,杨振宁教授关门弟子,仅用三年创造奇迹

有这么一位超级厉害的中国人&#xff0c;硬是把欧美那边垄断了十年的芯片技术给“撬”开了&#xff01;说起来&#xff0c;这才是我们该追的真正明星啊&#xff01;那么&#xff0c;这位大神到底是谁&#xff1f;又是怎么让欧美芯片圈儿里的人听到她的名字就心里发怵的呢&#…...

OpenCV视频I/O(20)视频写入类VideoWriter之用于将图像帧写入视频文件函数write()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 cv::VideoWriter::write() 函数用于将图像帧写入视频文件。 该函数/方法将指定的图像写入视频文件。图像的大小必须与打开视频编写器时指定的大…...

音视频入门基础:FLV专题(14)——FFmpeg源码中,解码Script Tag的实现

一、引言 在《音视频入门基础&#xff1a;FLV专题&#xff08;9&#xff09;——Script Tag简介》中对Script Tag进行了简介&#xff0c;本文讲述FFmpeg源码中是怎样解码FLV文件的Script Tag&#xff0c;拿到里面的信息。 二、flv_read_packet函数 从《音视频入门基础&#x…...

小猿口算APP脚本(协议版)

小猿口算是一款专注于数学学习的教育应用,主要面向小学阶段的学生。它提供多种数学练习和测试,包括口算、速算、应用题等。通过智能化的题目生成和实时批改功能,帮助学生提高数学计算能力。此外,它还提供详细的学习报告和分析,帮助家长和教师了解学生的学习进度和薄弱环节…...

【长文梳理webserver核心】核心类篇

前言 有三个核心组件支撑一个reactor实现 [持续] 的 [监听] 一组fd&#xff0c;并根据每个fd上发生的事件 [调用] 相应的处理函数。这三个组件就是 EventLoop 、Channel 以及 Poller 三个类&#xff0c;其中 EventLoop 可以看作是对业务线程的封装&#xff0c;而 Channel 可以看…...

如何做征信公司网站/网站seo优化网站

农村如何开展扶贫&#xff1f;是社会关注的焦点问题&#xff0c;也是一个老大难问题&#xff01;对于地方来说更是一个任重而道远地过程。 扶贫顾名思义是为帮助贫困地区和贫困户开发经济、发展生产、摆脱贫困的一种社会工作&#xff0c;是国家主导&#xff0c;地方推动&#x…...

网站里的地图定位怎么做/seo网站关键词优化报价

文件的打开操作 fopen 打开一个文件 FILE *fopen(const char *_restrict, const *_restrict) 第一个const char *_restrict 表示文件在磁盘里面的路径(*fp) 第二个const char *_restrict 表示打开文件的方式r、w、a(*mode) 当mode为w的时候&#xff0c;如果文件不存在&am…...

wordpress主题模板Git下载/网络营销方式有哪些分类

在ubuntu9.10环境下调试通过。1.安装vim&#xff0c;终端输入&#xff1a;wanpengubuntu:~$ sudo apt-get install vim-full2.终端输入,打开配置文件&#xff1a;wanpengubuntu:~$ vim ~/.vimrc3.改写配置文件&#xff0c;esc&#xff0b;&#xff1a;wq保存退出&#xff1a;1 …...

殡葬类网站建设/免费注册个人网站

Ideaprotobuf-maven-plugin插件编译proto文件,自动生成客户端和服务端代码首先&#xff0c;定义test.proto文件&#xff0c;官网样例如下syntax "proto3";//请在非空非注释的第一行指定当前文件使用的是proto3的语法,默认proto2package grpc;//package与java_packag…...

国外流行的内容网站/百度网盘网址是多少

目录 一、为什么要学习数据库 二、数据库的相关概念 三、数据库存储数据的特点 四、初始MySQL MySQL产品的介绍和安装 MySQL服务的启动和停止 MySQL服务的登录和退出 MySQL的常见命令 MySQL的语法规范 *SQL的语言分类 五、DQL语言&#xff08;数据查询语言&#x…...

哪些网站做耽美/竞价广告点击软件

以下为一段读取指定文本文件代码&#xff0c;用于读取服务器日志文件 public String index() { String s "E:/apache-tomcat-7.0.5/logs/testlog.log";try {String encoding "GBK";File file new File(s);if (file.isFile() && file.…...