Java集合面试

文章目录

      • Java集合框架
        • 说说有哪些常见的集合?
        • ArrayList和LinkedList的区别?
        • List和Set的区别?
        • HashMap的数据结构?把你了解的所有都讲一讲?
          • 数据结构:
        • put流程
        • Hashmap的resize方法的执行过程?
        • get流程
        • JDK8 HashMap为什么引入红黑树?解决了什么问题?
        • HashMap什么情况下会触发扩容呢?
        • HashMap与ConcurrentHashMap的区别是什么?
        • HashMap和HashTable的区别?
        • HashMap和HashTable的区别?
        • HashCode和equals方法?

Java集合框架

说说有哪些常见的集合?

集合相关类和接口都在Java.util中,主要分为3种:List(列表)、Map(映射)、Set(集)。

![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=D%3A%5C%E6%B5%8F%E8%A7%88%E5%99%A8%E4%B8%8B%E8%BD%BD%5CJava%E9%9B%86%E5%90%88%E5%85%B3%E7%B3%BB.png&pos_id=img-gLKtJrFP-16939104609

ArrayList和LinkedList的区别?

ArrayList基于动态数组实现,所以它的查找效率高,增删效率慢

LinkedList基于双向循环链表实现,它的查找效率低,增删效率快

List和Set的区别?

List:有序,按对象进入的顺序保存对象,可重复,允许多个null元素对象,可以使用迭代器去除所有元素,再逐一遍历,也可使用get(int index)获取指定下标的元素。
set:无序,不可重复,最多允许有一个null元素对象,取元素时只能通过iterator迭代器接口取得所有元素,再逐一遍历各个元素。

HashMap的数据结构?把你了解的所有都讲一讲?

数据结构:

1.7 数组+链表 1.8 采用数组+链表+红黑树

数组用来确定元素的位置;链表用来解决哈希冲突;红黑树提高查询效率

红黑树:

​ 根节点必须是黑色

​ 所有结点非黑即红

​ 红结点两个子结点一定是黑色

​ 任意结点到叶子结点,包含的黑色结点数目相同

put流程

​ 1.首先hash算法计算出哈希值

​ 2.判断数组是否需要扩容,是就执行resize方法扩容

​ 3.然后根据哈希值去数组寻找下标

​ 4.判断下标对应位置是否为空

​ 是的话就直接插入

​ 否的话就判断key是否相同

​ 相同的话直接覆盖

​ 不相同转到5

​ 5.判断是否为树节点(判断是否为红黑树)

​ 是的话在树中插入键值对

​ 否的话进行下一步

​ 6.遍历链表,判断key是否存在,

​ 存在的话就覆盖

​ 不存在的话插入链表尾部

​ 插入之后判断链表长度是否>8

​ 大于转为红黑树

​ 不大于就结束

​ 7.判断容量是否达到扩容阈值

​ 是就执行resize方法扩容

​ 否就结束

Hashmap的resize方法的执行过程?

两种情况会调用resize方法

1.第一次调用Hashma的put方法时,会调用resize方法对table数组进行初始化,如果不传入指定值,默认为16.

2.扩容时会调用resize方法,即size大于数组阈值threshold时,数组大小翻倍。

get流程

​ 1.根据哈希值到数组对应下标寻找元素

​ 判断是否是要查找的元素

​ 是就返回

​ 2.判断是否为树节点

​ 是就遍历红黑树查找

​ 3.判断是否为链表

​ 是就遍历链表查找

JDK8 HashMap为什么引入红黑树?解决了什么问题?

引入红黑树我认为是这样,当产生hash冲突时会形成链表,当数据多了冲突多了,链表会越来越长,造成链化,此时查询特别耗时间,本来时间复杂度为O(1)结构可能达到O(n),引入红黑树可以优化查询。

HashMap什么情况下会触发扩容呢?

当它未初始化,第一个put时会触发扩容。后面插入值,当大于扩容阈值时

HashMap与ConcurrentHashMap的区别是什么?

HashMap不是线程安全的,而ConcurrentHashMap是线程安全的.

ConcurrentHashMap采用锁分段技术,整个ConcurrentHashMap由一个个Segment组成,Segment通过继承ReentrantLock来进行加锁,所以每次需要加锁的操作锁住的是一个segment,这样只要保证每个Segment是线程安全的,也就实现了全局的线程安全。

HashMap和HashTable的区别?

HashMap线程不安全(效率高), 也可以使用Collections.synchronizedMap(hashMap)使其实现同步,Hashtable线程安全(效率比较低)

HashMap和HashTable的区别?

HashMap线程不安全(效率高), 也可以使用Collections.synchronizedMap(hashMap)使其实现同步,Hashtable线程安全(效率比较低)

HashMap的key和value都允许为null,而Hashtable的key和value都不允许为null,Hashtable遇到null,直接返回NullPointerException

HashCode和equals方法?

如果两个对象相等,则hashCode一定也是相同的
两个对象的hashcode值相同,它们不一定是相等的
equals方法被重写,则hashCode方法也必须被重写

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

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

相关文章

【算法与数据结构】530、LeetCode二叉搜索树的最小绝对差

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:二叉搜索树的性质是左子树的所有节点键值小于中间节点键值,右子树的所有节点键值大于中间节…

招聘寒冬中,Python 程序员如何突出重围?

在当前的就业市场中,许多人都在感叹“招聘寒冬”。 尤其是对于 Python 程序员来说,似乎面临着更大的挑战。 然而,我要说的是,挑战与机遇并存,只要我们能够找准自己的定位,提升自己的技能,Pyth…

运用谷歌浏览器的开发者工具,模拟搜索引擎蜘蛛抓取网页

第一步:按压键盘上的F12键打开开发这工具,并点击右上角三个小黑点 第二步:选择More tools 第三步:选择Network conditions 第四步:找到User agent一列,取消复选框的勾选 第五步:选择谷歌爬虫…

Spring框架中的Resource接口是什么,以及它在加载和访问资源时的关键作用

文章目录 什么是 Resource 接口?使用 Resource 加载资源使用 Resource 访问文件系统资源总结 🎈个人主页:程序员 小侯 🎐CSDN新晋作者 🎉欢迎 👍点赞✍评论⭐收藏 ✨收录专栏:Java框架 ✨文章内…

通过小程序实现微信扫码授权登录,网站接入微信扫码登录功能(永久免费)

需求 网站如果想要实现微信扫码登录其实有很多种方案,常见的方案就是微信开放平台和微信公众号服务号。前者是目前大部分网站并且是微信认可的一种方式,后者是开发者发现服务号具备扫码关注后即可获取用户基本信息的能力后而开发的一种方式。 而这两者…

【深入解析spring cloud gateway】08 Reactor 知识扫盲

一、响应式编程概述 1.1 背景知识 为了应对高并发服务器端开发场景,在2009 年,微软提出了一个更优雅地实现异步编程的方式——Reactive Programming,我们称之为响应式编程。随后,Netflix 和LightBend 公司提供了RxJava 和Akka S…

腾讯云centos7.6安装部署备忘

1.Mysql 1.1 安装mysql wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-community-server 1.1.1 安装后重启 service mysqld restart 1.1.2 初次安装mysql,root账…

【Python】【Fintech】用Python和蒙特卡洛法预测投资组合未来收益

【背景】 想利用蒙特卡洛方法和yahoo,stooq等财经网站上的数据快速预测特定portfolio的收益。 【分析】 整个程序的功能包括 读取json中的portfolio组合创建蒙特卡洛模拟预测收益的算法创建从财经网站获得特定投资组合数据,并根据2的算法获得该Index或Portfolio收益预测结…

ARTS打卡第四周之删除链表倒数第几个节点、gdb start命令、扩散模型、如何学习分享

Algorithm 题目:删除链表倒数第 n 个结点 分析:可以把通过两个结点进行标记,有一个节点需要遍历得快点,简称为快结点,有个结点遍历得慢,简称为慢结点。快结点先停在正数第 n 个结点处,然后快慢…

蓝桥杯打卡Day7

文章目录 阶乘的末尾0整除问题 一、阶乘的末尾0IO链接 本题思路:由于本题需要求阶乘的末尾0,由于我们知道2*510可以得到一个0,那么我们就可以找出2的数和5的数,但是由于是阶乘,所以5的数量肯定是小于2的数量&#xf…

车载Android应用开发与分析 - 初试 SystemUI Plugin

在前面的视频、文章中我们介绍完了整个车载Android应用开发所需要的基础知识: 【视频文稿】车载Android应用开发与分析 - 走进车载操作系统 - 掘金【视频文稿】车载Android应用开发与分析 - AOSP的下载与编译 - 掘金【视频文稿】车载Android应用开发与分析 - 开发系…

Elasticsearch:为具有许多 and/or 高频术语的 top-k 查询带来加速

作者:Adrien Grand Disjunctive queries(term_1 OR term_2 OR ... OR term_n)非常常用,因此在提高查询评估效率方面它们受到了广泛关注。 Apache Lucene 对于评估 disjunctive queries 有两个主要优化:一方面用于详尽评…

opencv(python)视频按帧切片/cv2.VideoCapture()用法

一、介绍 cv2.VideoCapture是OpenCV中一个用于捕捉视频的类。它可以访问计算机的摄像头,或从视频文件中读取图像。通过cv2.VideoCapture,用户可以轻松地捕捉、保存、编辑和传输视频流数据。 使用cv2.VideoCapture可以实现以下功能: 1. 打开…

计算机网络第四节 数据链路层

一,引入数据链路层的目的 1.目的意义 数据链路层是体系结构中的第二层; 从发送端来讲,物理层可以将数据链路层交付下来的数据,装换成光,电信号发送到传输介质上了 从接收端来讲,物理层能将传输介质的光&…

【Vue】一文让你进入Vue的大门

Vue简介 官网 ● 英文官网 ● 中文官网 介绍与描述 Vue历史 Vue 是一套用来动态构建用户界面的渐进式JS框架 构建用户界面:把数据通过某种办法变成用户界面 渐进式:Vue可以自底向上逐层的应用,简单应用只需要一个轻量小巧的核心库&#xff0c…

python 语法入门

文章目录 前言python 语法入门1. 语句分隔符2. 注释3. pep8规范4. 变量5. 扩展5.1. 运行此行代码的过程 前言 如果您觉得有用的话,记得给博主点个赞,评论,收藏一键三连啊,写作不易啊^ _ ^。   而且听说点赞的人每天的运气都不会…

【LeetCode刷题篇零】一些基础算法知识和前置技能(下)

数组常用技巧 使用数组代替Map 使用另一个数组来统计每个数字出现的次数,数组的下标作为key, 数组的值作为value, 将数字作为数组的下标索引,数组里的值存储该数字出现的次数,原理有点类似桶排序中使用的计数数组。 比如这里如…

小程序赖加载刷新数据页面数据堆叠问题debug

目录 项目所需 原生写赖加载存在的bug 解决问题思路及代码实现 思路: 代码实现: 列表.wxml 列表.js Wenjain_shanchu.js Wenjain_shanchu.json Wenjain_shanchu.wxml shouye.js ⭐️ 好书推荐 【内容简介】 项目所需 某高校大一新生入学&am…

EasyPHP-Devserver-17安装和配置mantisBT

文章目录 1、准备工作2、安装easyphp2.1 http://127.0.0.1 无法访问 3、安装mantisBT和phpMyAdmin3.1 配置浏览器的访问url和端口号(配置局域网内可访问)3.2 安装mantis 4、Administrator 注册新用户时设置登录密码5、附件上传6、邮件配置 文章参考自&am…

【广州华锐互动】煤矿提升机作业VR互动实训平台

在煤矿行业中,安全性是无可忽视的首要任务。传统的煤矿工人培训方法,如理论课堂讲解、实地操作演示,尽管具有一定的效果,但往往无法真实地模拟出煤矿的复杂环境,工作人员在没有真正接触煤矿的情况下,很难理…