每天几道Java面试题:集合(第四天)

2023-09-17 13:17:22


友情提醒

背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。PS:点击文章目录可直接跳转到文章指定位置。

第四幕 、

第一场)大厦楼下门口

【面试者老王,门卫甲,门卫乙,面试者奥斯卡】

门卫甲:天下熙熙皆为利来,天下攘攘皆为利往,像门卫乙和我这样不为名利专心看门,世界上又有多少人呢?

门卫乙:天下英雄,唯门卫甲与乙耳!

老王:面试失败了,找个保安工作吧,先问问情况。保安大哥你们平时都干嘛呢?

门卫甲:一般讨论Java面试题,总不能一直干这行啊。:1.说一下集合体系

门卫乙:分为单列集合体系和双列集合体系。如图:
在这里插入图片描述
单列集合:顶层接口Collection
一、列表(List)集合区分元素的顺序,且允许包含重复元素。
①List:列表,元素是有序的(元素带角标索引),可以有重复元素,可以有null元素。
②ArrayList:底层的数据结构是数组数据结构,特点是查询速度快(因为带角标),但是增删速度稍慢,因为当元素多时,增删一个元素则所有元素的角标都得改变,默认长度是10,当超过长度时,按50%延长集合长度。线程不同步。
③LinkedList:底层数据结构式链表数据结构(即后面一个元素记录前一个)
特点:查询速度慢,因为每个元素只知道前面一个元素,但增删速度快,因为元素再多,增删一个只要让其前后的元素重新相连即可,线程不同步的。
④Vector:底层数据结构是数组数据结构.特点是查询和增删速度都很慢。默认长度是10,当超过长度时,按100%延长集合长度。线程同步。
一般情况下,使用哪种List接口下的实现类呢?
如果要求增删快,考虑使用LinkedList
如果要求查询快,考虑使用ArrayList
如果要求线程安全,考虑使用Vector。
二、集(Set):Set集合中不区分元素的顺序,不允许出现重复元素。
①HashSet:底层数据结构是哈希表、存取速度快、元素唯一、线程不同步。
②TreeSet:底层数据结构式二叉树。可以对Set集合中的元素进行排序。元素有序、线程不同步。

双列映射:顶层接口Map
三、Map集合存储的是键值对,而且键是唯一的,Map和Set很像,Set集合底层就是使用了Map集合。Map集合没有迭代器,要取出元素必须先将Map集合转换成Set集合才能遍历元素
①HashTable: 底层是哈希表数据结构;不可以使用null键和null值;用作键的对象必须实现hashCode和equals方法来保证键的唯一性。线程同步效率低
②HashMap:底层是哈希表数据结构;允许使用null键和null值;线程不同步,效率高;
③TreeMap:底层是二叉树结构;允许使用null键和null值;线程不同步;

老王:都说Java卷,更有卷似Java者。保安这一行也不好干啊。咦奥斯卡你怎么这么快就面试完出来了。

奥斯卡:面试官问我:2.HashMap的工作原理是什么
我没回答出来。

老王:HashMap的工作原理是
①Java 中的 HashMap 是以键值对(key-value)的形式存储元素的。HaspMap的key可以为null。
②HashMap 需要一个 hash 函数,它使用 hashCode()和 equals()方法来向集合添加和检索元素。
③当调用 put()方法的时候,HashMap 会计算 key 的 hash 值,然后把键值对存储在集合中合适的索引上。如果 key已经存在了,value 会被更新成新值。HashMap 的一些重要的特性是它的容量,负载因子和扩容极限。当put的时候大于等于容量的0.75时,会进行扩容。
④多线程环境下若使用HashMap需要使用Collections.synchronizedMap()方法来获取一个线程安全的集合

奥斯卡:“美人赠我锦绣段,何以报之青玉案”,谢谢你告诉我答案。你面试怎么样?肯定也没过吧。

老王:惜败。说说:3.HashMap,TreeMap,HashTable的区别?

奥斯卡:幸好我以前写过这个的博客集合博客

区别存储底层如何选择key是否允许null是否线程同步
HashMap存储无序哈希表不需要排序允许非线程安全
HashTable存储无序哈希表需要线程安全不允许线程安全
TreeMap存储无序红黑树需要排序不允许非线程安全
LinkedHashMap存储有序链表和哈希表需要存储有序允许非线程安全

老王:说说:4.数组(Array) 和列表(ArrayList) 有什么区别

奥斯卡:如下:

数组集合
固定长度,无法改变长度可改变,可以扩容
可以存储基本类型数据,还可以存储引用类型的数据,但是只能存储相同类型的数据。只能存储引用类型的数据并且可以存储不同引用类型的数据。

老王:说说:5.list集合与set集合有什么区别

奥斯卡:如下表:可以看出来很复杂。

特点ListSet
重复元素可以重复不可重复
下标有下标没有下标
存储有序,可存储多个null无序,只能存一个null
函数拥有独有函数无特有函数,均来自Collection
遍历有下标可多种方式遍历无下标只能用迭代器遍历
数据结构ArrayList:底层是可变数组,线程不安全效率高HashSet:数据结构是哈希表,无序
数据结构LinkedList:底层是链表TreeSet:底层数据结构是二叉树,有序
数据结构Vector:底层是可变数组,线程安全效率低LinkedHashSet:底层是哈希表和链表,与别的set集合不同,它是有序的

老王:休息一下,下一场见。

第二场)大门口

【面试者老王,门卫甲,门卫乙,面试者奥斯卡】

门卫甲:滚滚长江东逝水,浪花淘尽英雄。我去东边卫生间逝个水,门卫乙你先蹲这看会儿门。

门卫乙:去卫生间你记得把你右后腿抬起来滋。

老王:你俩真有趣,不如我们继续讨论面试题吧。
6.Collections和Collection的区别

门卫乙:
①Collection是个java.util下的接口,它是各种集合结构的父接口,定义了集合对象的 基本操作方法。
②Collections是个java.util下的工具类,它包含有各种有关集合操作的静态方法,主要是针对集合类的一个帮助类或者叫包装类,它提供一系列对各种集合的搜索,排序,线程安全化等操作方法。

老王:那么。
7.Comparable和Comparator接口是干什么的?有什么区别。

门卫乙:== ①Comparable 接口只包含compareTo()方法。可给两个对象排序。(返回负数,0,正数来表明输入对象小于,等于,大于已经存在的对象。)
② Comparator 接口包含 compare()和 equals()两个方法。compare()方法用来给两个输入参数排序,返回负数,0,正数表明第一个参数是小于,等于,大于第二个参数。equals()方法需要一个对象作为参数,它用来决定输入参数是否和 comparator 相等。只有当输入参数也是一个 comparator 并且输入参数和当前 comparator 的排序结果是相同的时候,这个方法才返回 true。==

老王:最后一个问题。
8.集合中有哪些线程安全类,哪些是不安全的,哪些是支持排序的类?

奥斯卡:
①线程安全类:Vector、Hashtable、Stack。
②线程不安全的类:ArrayList、Linkedlist、HashSet、TreeSet、HashMap、TreeMap
③支持排序的类有HashSet、LinkedHashSet、TreeSet等
④一个是不支持排序的List接口,一个是有自身排序的Set接口

更多推荐

解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略

目录CAS什么是CASCAS的应用ABA问题异常举例Synchronized原理基本特征加锁过程偏向锁轻量级锁重量级锁其他优化操作锁消除锁粗化CAS什么是CASCAS:全称Compareandswap,字面意思:”比较并交换“,CAS涉及如下操作:假设内存中的原数据为A,旧的预期值为B,需要修改的值为C。首先把A与B进

安卓系统--翻译手机rom语言 添加多国语言 编译apk 反编译ODEX 工具步骤解析

很多小品牌机型不具备多语言设置。国内大都是中文。要想换为其他语言除非固件支持。例如国际版固件等等。大厂基本都有中文或者英文或者其他语言配置。而小品牌机型只能通过修改rom来达到多语言调用.工具步骤演示今天给友友介绍一款工具,可以用来翻译手机rom语言。添加多国语言和有些系统apk的编译与反编译等等。工具支持小米系列低版

NTPS/YCD80-1-400V终端电气综合治理保护系统 末端用电防护治理装置

NTPS/YCD80-1-400V终端电气综合治理保护系统赵经理:18O668722O7(同微信)QQ:3O824OO571公司是一家从事智能电网用户端的智能电力监控与电气安全系统的研发,生产和销售于一体的高新技术企业,自主研发了风机节能控制器,新风空调节能控制器,电梯节能控制器,水泵节能控制器,热交换系统节能控制器,

还没用熟 TypeScript 社区已经开始抛弃了

根据rich-harris-talks-sveltekit-and-whats-next-for-svelte这篇文章的报道,Svelte计划要把代码从TS换到JS了。TheteamisswitchingtheunderlyingcodefromTypeScripttoJavaScript.Thatandtheupda

【腾讯云Cloud Studio 实战训练营】深入解析Cloud Studio—React 快速构建点餐页面

序言运气不会凭空而来,只有当你足够努力的时候,才会足够幸运。文章标记颜色说明:黄色:重要标题红色:用来标记结论绿色:用来标记论点蓝色:用来标记论点腾讯云CloudStudio是一款基于云端的集成开发环境(IDE),它可以让开发人员在任何地方、任何时间使用互联网访问和编写代码,而无需安装任何软件或工具。在本文中,将详细介

Windows 上的 React(初学者)

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录必备条件一些基本术语和概念尝试在VisualStudioCode中使用React尝试通过API使用React如果你不熟悉如何使用React,本指南介绍了一些基础知识,可帮助你入门。一些基本术语和概念尝试在Vis

【腾讯云 Cloud Studio 实战训练营】使用Cloud Studio快速构建React完成点餐H5页面还原

文章目录一、前言二、CloudStudio功能介绍三、实验介绍四、实操指导打开官网注册CloudStudio五、开发一个简版的点餐系统安装antd-mobile安装Less六、发布仓库七、开发空间八、总结一、前言IDE(集成开发环境)是一种软件工具,旨在为开发者提供一个集成的开发平台,其中包含了各种用于编写、调试和部署

Pandas 掉包侠刷题实战--条件筛选

本博文内容为力扣刷题过程的记录,所有题目来源于力扣。题目链接:https://leetcode.cn/studyplan/30-days-of-pandas/文章目录准备工作1.isin(values)和~2.df.drop_duplicates()3.df.sort_values()4.df.rename()5.pd

使用FileZilla连接本地和服务器进行文件传输

项目场景:使用FileZilla连接本地和服务器进行文件传输问题描述使用FileZilla连接本地和服务器进行文件传输出现150或425原因分析:1.防火墙是否开放端口2.公共ip或账号密码是否正确解决方案:从配置到解决问题的步骤1.下载安装FileZilla搭建步骤步骤一:安装FileZillaServer服务软件安

适用于 Android™️ 的 Windows 子系统

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录开发人员GitHub预览计划设置开发环境先决条件安装AmazonAppstore适用于Android™️的Windows子系统设置测试和调试在Windows“设置”中启用开发人员模式连接到适用于Android™

适用于 Android 的 Windows 子系统™️发行说明

🎬岸边的风:个人主页🔥个人专栏:《VUE》《javaScript》⛺️生活的理想,就是为了理想的生活!目录内部版本2304.40000.3.0内部版本2303.40000.3.0内部版本2302.4000内部版本2301.40000.4.0内部版本2211.40000.11.0内部版本2210.40000.7.0内

热文推荐