Java后端开发面试题——集合篇

 ArrayList底层的实现原理是什么

底层数据结构

ArrayList底层是用动态的数组实现的

初始容量

ArrayList初始容量为0,当第一次添加数据的时候才会初始化容量为10

扩容逻辑

ArrayList在进行扩容的时候是原来容量的1.5倍,每次扩容都需要拷贝数组

 添加逻辑

确保数组已使用长度(size)加1之后足够存下下一个数据.

​计算数组的容量,如果当前数组已使用长度+1后的大于当前的数组长度,则调用grow方法扩容(原来的1.5倍)

确保新增的数据有地方存储之后,则将新元素添加到位于size的位置上。​

返回添加成功布尔值。

ArrayList list=new ArrayList(10)中的list扩容几次

该语句只是声明和实例了一个 ArrayList,指定了容量为 10,未扩容 

如何实现数组和List之间的转换

数组转List

String[] strs = {"aaa","bbb","ccc"};
List<String> list = Arrays.asList(strs);

List转数组

    List<String> list = new ArrayList<String>();list.add("aaa");list.add("bbb");list.add("ccc");String[] array = list.toArray(new String[list.size()]);

用Arrays.asList转List后,如果修改了数组内容,list受影响吗

修改了数组的内容,list会受影响,因为它的底层使用的Arrays类中的一个内部类ArrayList来构造的集合,在这个集合的构造器中,把我们传入的这个集合进行了包装而已,最终指向的都是同一个内存地址

List用toArray转数组后,如果修改了List内容,数组受影响吗

修改了list内容,数组不会影响,当调用了toArray以后,在底层是它是进行了数组的拷贝,跟原来的元素就没啥关系了,所以即使list修改了以后,数组也不受影响

ArrayList 和 LinkedList 的区别是什么?

底层数据结构

ArrayList 是动态数组的数据结构实现

LinkedList 是双向链表的数据结构实现

操作数据效率

        查找时间复杂度都是O(n)

        新增和删除时间复杂度是O(n)

内存空间占用

ArrayList底层是数组,内存连续,节省内存

LinkedList 是双向链表需要存储数据,和两个指针,更占用内存

线程安全

都不是线程安全的

在方法内使用,局部变量则是线程安全的

使用线程安全的ArrayList和LinkedList

List<Object> syncArrayList = Collections.synchronizedList(new ArrayList<>());
List<Object> syncLinkedList = Collections.synchronizedList(new LinkedList<>());

二叉搜索树

在树中的任意一个节点,其左子树中的每个节点的值,都要小于这个节点的值,而右子树节点的值都大于这个节点的值,没有键值相等的节点

 红黑树

一种自平衡的二叉搜索树(BST)

性质1:节点要么是红色,要么是黑色

性质2:根节点是黑色

性质3:叶子节点都是黑色的空节点

性质4:红黑树中红色节点的子节点都是黑色

性质5:从任一节点到叶子节点的所有路径都包含相同数目的黑色节点

在添加或删除节点的时候,如果不符合这些性质会发生旋转,以达到所有的性质

 散列表(Hash Table)

是根据键(Key)直接访问在内存存储位置值(Value)的数据结构,利用了数组支持按照下标进行随机访问数据的特性

散列函数计算得到的散列值必须是大于等于0的正整数,因为hashValue需要作为数组的下标。

如果key1==key2,那么经过hash后得到的哈希值也必相同即:hash(key1) == hash(key2)

如果key1 != key2,那么经过hash后得到的哈希值也必不相同即:hash(key1) != hash(key2)

散列冲突

不同的key计算得到的散列值都不同几乎是不可能的

链表法(拉链)

所有散列值相同的元素我们都放到相同槽位对应的链表中,链表法中的链表如果是红黑树(可以防止DDos攻击)

 HashMap实现原理

底层使用hash表数据结构,即数组和链表或红黑树

当我们往HashMap中put元素时,利用key的hashCode重新hash计算出当前对象的元素在数组中的下标

存储时,如果出现hash值相同的key,此时有两种情况

        a. 如果key相同,则覆盖原始值;

        b. 如果key不同(出现冲突),则将当前的key-value放入链表或红黑树中

 获取时,直接找到hash值对应的下标,在进一步判断key是否相同,从而找到对应值。

链表的长度大于8 且 数组长度大于64 转换为红黑树(减少搜索时间)

红黑树拆分成的树的结点数小于等于临界值6个,则退化成链表

jdk1.7采用的是拉链法 链表和数组相结合

HashMap的put方法的具体流程

HashMap是懒惰加载,在创建对象时并没有初始化数组

在无参的构造函数中,设置了默认的加载因子是0.75

 讲一讲HashMap的扩容机制

 hashMap的寻址算法

计算对象的 hashCode()

再进行调用 hash() 方法进行二次哈希, hashcode值右移16位再异或运算,让哈希分布更为均匀

最后 (capacity – 1) & hash 得到索引

hashmap在1.7情况下的多线程死循环问题

尾插法

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

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

相关文章

全球互联网裁员下测试人员何去何从?

时间好像突然加快了步伐瞬间觉得匆匆&#xff0c;转眼已经23年&#xff0c;从20年到23年。回想起来恍恍惚惚&#xff0c;疫情中经历的种种就好像没有发生过一样&#xff0c;很多的魑魅魍魉荒唐可笑真实又虚幻&#xff0c;时光向前人生向后&#xff0c;那些魔幻的人和事也慢慢消…

软考:中级软件设计师:无线网,网络接入技术,ipv6

软考&#xff1a;中级软件设计师:无线网 提示&#xff1a;系列被面试官问的问题&#xff0c;我自己当时不会&#xff0c;所以下来自己复盘一下&#xff0c;认真学习和总结&#xff0c;以应对未来更多的可能性 关于互联网大厂的笔试面试&#xff0c;都是需要细心准备的 &#x…

k8s+jenkins+docker部署微服务实现CI/CD

“所爱隔山海&#xff0c;山海不可平&#xff0c;海有舟可渡&#xff0c;山有路可行,此爱翻山海&#xff0c;山海皆可平。” 作为一个想搞开发的&#xff0c;最近似乎都在干运维&#xff0c;不知道有没有跑偏。。。 2021.5.14 一般的中小公司个人还是不太建议使用k8s&#xff0…

Material UI 的安装与使用

Material UI 的安装使用 (附练习demo) Material UI ( 也称 MUI ) 是一个开源的React组件库&#xff0c;实现了Google的Material Design。 它包括一个全面的预构建组件集合&#xff0c;开箱即用&#xff0c;可用于生产。 材料UI设计精美&#xff0c;并具有一套自定义选项&#…

Chakra-ui

一、chakra-ui组件库介绍 Chakra UI 是⼀个简单的, 模块化的易于理解的 UI 组件库. 提供了丰富的构建 React 应⽤所需的UI组件. ⽂档: https://chakra-ui.com/docs/getting-started Chakra UI 内置 Emotion&#xff0c;是 CSS-IN-JS 解决⽅案的集⼤成者基于 Styled-Systems…

8.6.tensorRT高级(3)封装系列-终极封装形态,以及考虑的问题

目录 前言1. 终极封装总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 高级-终极封装形态&#xff0c;以及考虑的…

android版本360ui,国产手机UI系统有哪些

国产手机UI系统有哪些 UI系统的用户体验、生态系统的建立等“软实力”将是移动终端厂商的主战场&#xff0c;拥有生态系统的厂商才能掌握主动。那么&#xff0c;都有国产手机UI系统?下面就和jy135小编一起看看吧! 最好用的九大国产手机UI系统 一、小米MIUI MIUI是小米旗下的定…

仿华为EmotionUI 3.0滑动效果

华为美腿妻手机卖的比较火&#xff0c;其中的一个两点是Emotion 3.0&#xff0c;里面各种UI让人耳目一新的感觉。 一开始看到我就喜欢了其中的很多设计。其中的一个是左右滑动类似于开源项目Indecator的。但是他的实现不仅仅是这个。 于是我就再别人的基础上改动了一下&#x…

中国人需要了解华为鸿蒙系统的8个事实,真的这么美好吗?

1. 华为的鸿蒙系统是怎么回事? 华为于昨天推出的鸿蒙系统是谷歌安卓系统的替代品&#xff0c;可应用于电视、汽车、平板电脑和其他设备。 之前民间一直传言说&#xff0c;华为正在为手机、平板电脑和其他智能设备开发自己的操作系统&#xff0c;以防无法使用谷歌的Android软件…

Android学习之路(11) ActionBar与ToolBar的使用

自android5.0开始&#xff0c;AppCompatActivity代替ActionBarActivity&#xff0c;而且ToolBar也代替了ActionBar&#xff0c;下面就是ActionBar和ToolBar的使用 ActionBar 1、截图 2、使用 2.1、AppCompatActivity和其对应的Theme AppCompatActivity使用的是v7的ActionBa…

十六、pikachu之SSRF

文章目录 1、SSRF概述2、SSRF&#xff08;URL&#xff09;3、SSRF&#xff08;file_get_content&#xff09; 1、SSRF概述 SSRF(Server-Side Request Forgery&#xff1a;服务器端请求伪造)&#xff1a;其形成的原因大都是由于服务端提供了从其他服务器应用获取数据的功能&…

基于体素形态学测量分析(VBM)的工具包比较及其在年龄预测中的应用

摘要 基于体素的形态学测量分析(VBM)通常用于灰质体积(GMV)的局部量化。目前存在多种实现VBM的方法。然而&#xff0c;如何比较这些方法及其在应用中的效用(例如对年龄效应的估计)仍不清楚。这会使研究人员疑惑他们应该在其项目中使用哪种VBM工具包。本研究以用户为中心&#…

使用MV制作最简单的游戏:我要做游戏(4)

公众号原文 本期将设计游戏中基本,也是核心的数值元素。不想循规蹈矩的朋友也可自行回顾前三期的内容: 我要做游戏(1) 我要做游戏(2) 我要做游戏(3) 呃,说道数值,可能一些人脑海里觉得它是这样的: 这么想其实也没错啦,不过实际游戏设计中,攻击力与防御力只是…

On-Manifold Optimization: Local Parameterization

Overview Manifold Space vs Tangent Space Jacobian w.r.t Error State Jacobian w.r.t Error State vs True State According 1 2.4, The idea is that for a x ∈ N x \in N x∈N the function g ( δ ) : f ( x ⊞ δ ) g(\delta) : f (x \boxplus \delta) g(δ):f(x…

DeforGAN:用GAN实现星际争霸开全图外挂!

点击上方“机器学习与生成对抗网络”&#xff0c;关注"星标" 获取有趣、好玩的前沿干货&#xff01; 文章来源&#xff1a;机器之心 作者&#xff1a;Yonghyun Jeong等 参与&#xff1a;李诗萌、Geek AI 对于广大星际争霸迷来说&#xff0c;地图全开作弊代码「Black …

局域网联机_七日杀v17.2(B27)版/支持局域网联机/多项修改器/初始存档/局域网联机教程...

点击蓝字关注我们&#xff0c;每日提供优质游戏 游戏介绍 那时地球表面已经变成废墟&#xff0c;更糟的是&#xff0c;没有人知道到底是因为辐射、生化武器还是天灾&#xff0c;导致地面上出现了一群僵尸。玩家将扮演在美国亚历桑纳地区的一名幸存者&#xff0c;那里是地球最后…

魔兽争霸 / 星际争霸 无法使用 CTRL + 1 进行编队

打游戏时发现不好编队&#xff0c; 应该是快捷键冲突导致。 查了一下&#xff0c;是输入法的问题。 目前用的QQ五笔输入法里用到了 CTRL 1&#xff0c;所以在游戏里就用不了了。 如下面所示&#xff0c;把最后的 CTRL 1 的复选框勾掉就可以了。

DeepMind《星际争霸2》AI碾压人类遭Gary Marcus猛怼:通用智能就是空谈

来源&#xff1a;新智元 本文 3635 字 &#xff0c;建议阅读 10分钟 。 本文介绍了Marcus对AI碾压人类以及未来通用智能研究意义的质疑。 针对DeepMind前几日发布的《星际争霸2》智能体AlphaStar进化版&#xff0c;他在Twitter再次提出了自己的质疑。不过这次&#xff0c;Marcu…

星际2数据编辑器

转自&#xff1a;https://blog.csdn.net/xoyojank/article/details/8122886 只列了技能的划分&#xff0c;其余的参考链接 对象类型 星际2就对象有很多类型, 这里只说一下比较常见的. 这些类型还有子类型, 对象的实例之间是可以进行数据拷贝和派生的. Units(单位) 大多数人应…

nodejs里面的event loop

1. event loop 1.1 什么是event-loop js的标准文档定义如下 https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#event_loop https://javascript.info/event-loop html的标准定义 https://html.spec.whatwg.org/multipage/webappapis.html#event-loop-proc…