面试-collection体系

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.mfbz.cn/a/750886.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

安霸CVFlow推理开发笔记

一、安霸环境搭建: 1.远程172.20.62.13 2. 打开Virtualbox,所在目录:E:\Program Files\Oracle\VirtualBox 3. 配置好ubuntu18.04环境,Ubuntu密码:amba 4. 安装toolchain,解压Ambarella_Toolchain_CNNGe…

Android 大话binder通信 (下)

戳蓝字“牛晓伟”关注我哦! 用心坚持输出易读、有趣、有深度、高质量、体系化的技术文章 前情提要 Android 大话binder通信 (上)主要介绍了矮挫丑进程一直暗恋白富美进程,遂发送情书给她,以表达对她的爱慕之情,而情书顺利的到达…

linux中awk,sed, grep使用(待补充)

《linux私房菜》这本书中将sed和awk一同归为行的修改这一点,虽然对,但不利于实际处理问题时的思考。因为这样的话,当我们实际处理问题时,遇到比如说统计文本打印内容时,我们选择sed还是awk进行处理呢? 也因…

什么类型的网站需要配置OV证书

目录 什么网站更适合OV证书: 申请OV需要注意: 申请单位组织验证型OV SSL证书的详细步骤 OV SSL证书全称Organization Validation SSL(组织验证性SSL证书),是一种需要验证网站真实身份的数字证书。通过证书颁发机构审查网站企业身份和域名所…

单例模式(下)

文章目录 文章介绍步骤安排及单例讲解step1:注册单例类型(main.cpp)step2:定义类和私有构造函数(keyboardinputmanager.h)step3:(keyboardinputmanager.cpp)step4:在qml中…

springboot 缓存框架Cache整合redis组成二级缓存

springboot 缓存框架Cache整合redis组成二级缓存 项目性能优化的解决方案除开硬件外的方案无非就是优化sql,减少sql 的执行时间,合理运用缓存让同样的请求和数据库之间的连接尽量减少,内存的处理速度肯定比直接查询数据库来的要快一些。今天就…

临时挂载字体文件工具

一、简介 1、FontLoader是一款专为字体管理和快速加载设计的工具,它能够在不占用系统资源的情况下,实现字体的临时加载和快速切换。用户可以将字体文件存放在系统之外的硬盘分区,并通过FontLoader直接从内存中加载这些字体,从而避…

Nginx安装部署

简介 Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。 同Tomcat一样,Nginx可以托管用户编写的WEB应用程序成为可访问的网页服务,同时也可以作为流量代理服务器,控制流量的中转。 Ngi…

【MySQL】架构体系概览

本文使用的MySQL版本是8.0 MySQL架构 ​MySQL架构整体由外部程序和MySQL服务器构成。其中内部服务器分成连接层,服务层,服务管理和公共组件,存储引擎层和文件系统层。 连接层 连接层的作用是处理客户端的连接。 网络端口 一台MySQL服务器…

java项目部署工具

Java Web项目部署文档 需要工具 idea\eclipse、node.js(vue部分需要)、mysql、jdk1.8 1. 准备工作 (1)安装jdk 下载地址: jdk1.8下载 一直下一步 安装成功后配置环境变量 默认jdk安装在C:\Program Files\Java\jdk1.8.0_202\ 在Path路径添加:%JAVA_HOME…

mq需要知道的点

一、为什么要使用mq 解耦、异步、削峰 二、mq 有什么优缺点 优点就是在特殊场景下有其对应的好处,解耦、异步、削峰。 缺点有以下几个: 系统可用性降低 系统引入的外部依赖越多,越容易挂掉。万一 MQ 挂了,MQ 一挂&#xff0c…

Jetpack - Navigation: 一个全面的安卓开发指南

引言 导航是任何安卓应用程序中至关重要的部分。无缝地在不同的屏幕之间移动并传递数据,对于流畅的用户体验来说至关重要。在这篇博客中,我们将深入探讨Jetpack的Navigation组件,这个强大的框架旨在简化安卓应用中的导航。我们将涵盖从设置和…

应急响应靶机-Linux(1)

前言 本次应急响应靶机采用的是知攻善防实验室的Linux-1应急响应靶机 靶机下载地址为: https://pan.quark.cn/s/4b6dffd0c51a 相关账户密码: defend/defend root/defend 解题 第一题-攻击者的IP地址 先找到的三个flag,最后才找的ip地址 所…

openinstall拥抱鸿蒙生态,SDK全面适配HarmonyOS NEXT

作为国内领先的App渠道统计与深度链接服务商,openinstall持续推动鸿蒙生态建设,近日正式发布openinstall HarmonyOS SDK,并成功入驻鸿蒙生态伙伴SDK专区,成为华为鸿蒙生态的合作伙伴,为鸿蒙应用开发者带来安全合规、高…

C语言的内存知识

这节我们主要认识一下内存,便于理解指针操作和后续内存管理。 一、内存分区模型 C程序在执行时,将内存大方向划分为4个区域 (可以结合函数小节的函数栈帧部分看一下) ⚪ 代码区:存放函数体的二进制代码,由操作系统进…

Java | Leetcode Java题解之第174题地下城游戏

题目&#xff1a; 题解&#xff1a; class Solution {public int calculateMinimumHP(int[][] dungeon) {int n dungeon.length, m dungeon[0].length;int[][] dp new int[n 1][m 1];for (int i 0; i < n; i) {Arrays.fill(dp[i], Integer.MAX_VALUE);}dp[n][m - 1] …

HarmonyOS ArkUi Tabs+TabContent+List实现tab吸顶功能

Demo效果 Entry Component struct StickyNestedScroll {State message: string Hello WorldState arr: number[] []scroller new Scroller()StyleslistCard() {.backgroundColor(Color.White).height(72).width("100%").borderRadius(12)}build() {Scroll(this.sc…

火山引擎ByteHouse:新一代云数仓必不可少的五大核心能力

从数据库领域的发展历程来看&#xff0c;分析型数据库已有 40 多年的发展历史&#xff0c;与数据库基本同时代。从OLTP 和 OLAP 的分支来看&#xff0c;分析型数据库支持了海量数据规模下的聚合性分析。尤其是随着移动互联网甚至 AI 等领域的发展&#xff0c;用户画像行为分析的…

AFLNet入门教学——测试RTSP协议实现Live555(Ubuntu)

1、简介 本文旨在使用AFLNet对RTSP协议实现Live555进行模糊测试。实验环境为&#xff1a;Ubuntu22.04.4AFLNet安装参考&#xff1a;AFLNet入门教学——安装&#xff08;Ubuntu22.04.4&#xff09;-CSDN博客 2、安装Live555 本次实验采取的是live555在2018年8月28日上传的版本…

【应届应知应会】Linux常用指令

SueWakeup 个人主页&#xff1a;SueWakeup 系列专栏&#xff1a;学习技术栈 个性签名&#xff1a;保留赤子之心也许是种幸运吧 本文封面由 凯楠&#x1f4f8;友情提供 目录 文件与目录管理 目录操作命令&#xff1a; ls [选项] [目录或文件] mkdir 文件操作命令&#xf…