面试-collection体系

news2024/10/6 1:34:30

1.整体collection体系图在这里插入图片描述
2.集合List和Set
在这里插入图片描述
(1)ArrayList和LinkedList区别
我们知道,通常情况下,ArrayList和LinkedList的区别有以下几点:
1. ArrayList是实现了基于动态数组的数据结构(可以实现扩容,实现方式是建立一个新的数组,再覆盖掉原先的数组;因为ArrayList的创建就是新建一个数组),而LinkedList是基于链表的数据结构;(LinkedList底层维护了一个双向链表,由于其是双向链表所以其对元素的增,删效率要比ArrayList要好,也因是链表,其没有扩容机制,就是一直在前面和后面新增就好(链表的头插法和尾插法))
2. 对于随机访问get和set,ArrayList要优于LinkedList,因为LinkedList要移动指针;
对于插入跟删除,LinkedList的时间更长了, 现在大概知道了,插入位置的选取对LinkedList有很大的影响,
因为LinkedList在插入时需要向移动指针到指定节点, 才能开始插入,,一旦要插入的位置比较远,LinkedList就需要一步一步的移动指针, 直到移动到插入位置,这就解释了, 为什么节点值越大, 时间越长, 因为指针移动需要时间。
而ArrayList是数组的数据结构, 可以根据下标直接获得位置, 这就省去了查找特定节点的时间,所以对ArrayList的影响不是特别大。
压测:
主要有两个因素决定他们的效率,插入的数据量和插入的位置。我们可以在程序里改变这两个因素来测试它们的效率。当数据量较小时,测试程序中,大约小于30的时候,两者效率差不多,没有显著区别;当数据量较大时,大约在容量的1/10处开始,LinkedList的效率就开始没有ArrayList效率高了,特别到一半以及后半的位置插入时 ,LinkedList效率明显要低于ArrayList,而且数据量越大,越明显。

(2)Hashset与TreeSet的区别
Hashset的底层是HashMap.在调用add方法时,将元素以键的形式放入到HashMap里,同时给他对应一个值。
TreeSet是NavigableMap的马甲。使用add将元素以键的形式保存到TreeMap的key里。而它的值就是final Object PRESENT.NavigableMap是个interface。是由TreeMap实现的。TreeSet是TreeMap的马甲。使用compareto进行自然排序的。关键词:排序

3.集合之Map
在这里插入图片描述
Map里的key是通过set实现的,不可重复,唯一。Value是通过collection实现的,可重复的
在这里插入图片描述
(1)HashMap与HashTable与conccurentHashMap的区别
hashmap的数组长度默认是16.
在这里插入图片描述
在这里插入图片描述
分析:
使用TREEIFY_THRESHOLD来控制是否将链表转化为红黑树来存储。
Hash值相等的键值对以链表形式存储,如果链表的大小超过TREEIFY_THRESHOLD(默认是8),就会被改造成红黑树。低于UNTREEIFY_THRESHOLD(默认为6),又会被转化成链表。为了更高的性能。HashMap使用lazyLoad的原则,在首次使用的时候才会被初始化。

在这里插入图片描述
碰撞:意味着hash值相等。
在这里插入图片描述
在这里插入图片描述

Hashtable:
早期java类库提供的哈希表的实现。
线程安全:涉及到修改HashTable的方法,使用synchronized修饰
串行化方式运行,性能较差。

conccurentHashMap:
分析:
如何优化Hashtable?
通过锁细粒度化,将锁拆解成多个锁进行优化。

早期的ConcurrentHashMap通过分段锁Segment实现。
在这里插入图片描述
当前的ConcurrentHashMap:CAS+synchronized使锁更细化。
数据结构采用数组+链表+红黑树。Synchronized只锁住当前链表或者红黑树的首节点,
只要hash不冲突,就不会产生并发。
在这里插入图片描述
在这里插入图片描述

总结:
在这里插入图片描述

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

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

相关文章

Adobe Acrobat编辑器最新版下载安装 Adobe Acrobat版本齐全!

功能强大,Adobe Acrobat无疑是PDF文档处理领域的翘楚。这款软件集多种PDF文档处理功能于一身,不仅使得用户可以轻松地编辑PDF文档,更能轻松应对转换和合并等多种需求。 在编辑功能上,Adobe Acrobat的表现尤为出色。无论是添加文字…

shark云原生-日志管理体系-filebeat

文章目录 1. deploy 文件1.1 RBAC1.2. DaemonSet1.2.1. Elasticsearch 连接信息1.2.2. Volume 1.3. ConfigMap1.3.1. 日志路径1.3.2. 日志事件输出目标 2. 在控制平面节点上运行Filebeat3. 查看输出3.1. 关于处理器 processors 4. 日志收集配置4.1. 手动指定日志收集路径4.2. 自…

3d渲染软件有哪些(3),渲染100邀请码1a12

3D渲染很复杂,涉及到多方面的知识,比如光线追踪、全局光照、反射、折射等,还有3D软件的选择和应用,今天我们继续介绍其他的3D渲染软件。 1、Maya Maya是三维计算机图形软件,它功能丰富,灵活性强&#xff…

Servlet中请求转发【 Forward】与重定向【Redirection】的区别

在Servlet中,请求转发(Request Forwarding)和重定向(Redirection)是用于控制请求流程的两种不同机制。它们的主要区别如下: 一、请求转发 服务器内部操作:转发是在服务器内部进行的操作&#xf…

构建LangChain应用程序的示例代码:46、使用 Meta-Prompt 构建自我改进代理的 LangChain 实现

Meta-Prompt 实现 摘要: 本文介绍了 Noah Goodman 提出的 Meta-Prompt 方法的 LangChain 实现,该方法用于构建能够自我反思和改进的智能代理。 核心思想: Meta-Prompt 的核心思想是促使代理反思自己的性能,并修改自己的指令。…

Postgresql从小白到高手 九 : psql高级查询及内部视图使用

Postgresql从小白到高手 九:pgsql 复杂查询及内部表高级查询 文章目录 Postgresql从小白到高手 九:pgsql 复杂查询及内部表高级查询一、多表查询二、pgsql内部表1.内部表2.内部表查询应用 一、多表查询 内联 :inner join on 简写 join on 结果集只有符合 筛选条件…

Github 2024-06-21 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-21统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量TypeScript项目3Python项目3Java项目2非开发语言项目2JavaScript项目1Rust项目1Dart项目1HTML项目1Vue项目1C++项目1TensorFlow: 机器学习的开源…

用Python制作一个简单的计算器(加减乘除)

简易计算器 写在前面 小编用python实现了一个简单的计算器,一起来看看吧~ 需要环境: pycharm python 一、需求分析 1.1 功能分析 使用Python的Tkinter界面设计实现一个简单的计算器,主要功能按钮包括数字键、四则运算符、等于号和清除…

fpga bitstream userid

fpga version register # xdc 文件 set_property BITSTREAM.CONFIG.USERID "0xDEADC0DE" [current_design] set_property BITSTREAM.CONFIG.USR_ACCESS 0x66669999 [current_design]ug908 在bit下载之后的property可以看到 ,GUI里面Tools → Edit Devic…

Centos安装redis(附:图形化管理工具)

第一步:下载redis wget http://download.redis.io/releases/redis-6.2.7.tar.gz 第二步:解压 tar zxvf redis-6.2.7.tar.gz 第三步:安装依赖环境 yum -y install gcc-c第四步:安装依赖环境 make install第五步:修…

一种PCB外壳设计方法的尝试

一个异性PCB的板框,外壳,PCB设计: 正常情况下先由机械工程师用CAD设计出板框导出DXF文件,之后基于此DXF文件作为板框进行PCB设计和外壳设计,但对硬件工程师来讲有时候直接在PCB软件上进行简单的板框设计显得更方便&am…

揭秘!这款电路设计工具让学校师生都爱不释手——SmartEDA的魔力何在?

随着科技的飞速发展,电子设计已成为学校师生们不可或缺的技能之一。而在众多的电路设计工具中,有一款名为SmartEDA的工具,凭借其强大的功能和友好的用户体验,迅速赢得了广大师生的青睐。今天,就让我们一起探索SmartEDA…

Linux 交叉编译工具链格式 sqlite3编译示例

1、交叉编译工具链 1.1 定义 交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发工具集,它允许开发者在一个平台上(例如高性能的PC或服务器)编译生成另一个平台(例如嵌入式系统或不同的操作系统和硬件架构&#xff09…

【教程】DPW 325T FPGA板卡程序下载与固化全攻略

到底什么是固化??? 在开发板领域,"固化"通常指的是将软件或操作系统的镜像文件烧录(Flash)到开发板的存储介质上,使其成为开发板启动时加载的系统。这个过程可以确保开发板在启动时能…

2024年8月 PMP认证考试 7月9日正式开始报考

尊敬的各位考生: 经PMI和中国国际人才交流基金会研究决定,中国大陆地区2024年第三期PMI认证考试定于8月31日举办。 7月9日正式开始中文报考,在此之前需要完成英文资料注册,如果您想参加8月考试,还有最后10天报名即截止…

鸿蒙智慧监控解决方案:由Al视觉盒、网络摄像头、管理后台、手机端、NVR等组成

方案架构 整体技术架构由Al视觉盒、网络摄像头、管理后台、手机端、NVR等组成,提供从前端智能监控到后端数据处理的完整闭环。 方案价值 01/节约人力成本 ①AI算法对监控内容进行实时的智能检测,准确率高,有效减少错漏,无需多个…

免费可视化工具为何成为数据分析新宠?

免费可视化工具为何越来越受欢迎?在当今数据驱动的时代,数据分析和展示已成为各行各业不可或缺的核心能力。然而,传统的数据处理和可视化工具往往价格昂贵,且使用门槛较高,这为许多中小企业和个人用户带来了不小的困扰…

java 简单零钱通

目标 面向过程版 代码 package new_pluse;import java.text.SimpleDateFormat; import java.util.Date; import java.util.Scanner;public class change_common{public static void main(String arg[]){//定义相关变量Scanner scanner new Scanner(System.in);String key&qu…

智能巡检平台建设,减轻一线巡检员负担

智能巡检系统平台的建设,通过技术手段减轻一线巡检员的工作负担,提高巡检工作的效率和质量。以下是该平台建设的几个关键点和效果归纳: 一、自动化规划与分配 智能巡检系统能够自动规划巡检路线、分配巡检任务,从而减少了巡检员在…

@城规人快来抄作业!转GIS开发月薪12000+

从性价比极低的时薪,到相对稳定的月薪过万,我做对了哪些事情? 今天分享的是城乡规划专业的L拿到GIS开发高薪offer的故事。 初识新中地 该同学是城乡规划专业本科,下面称他为L同学。 L同学是今年夏天在网络上了解了GIS开发和新…