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

news2025/1/12 10:07:25

目录

  • 第四幕 、
    • 第一场)大厦楼下门口
    • 第二场)大门口

友情提醒

背面试题很枯燥,加入一些戏剧场景故事人物来加深记忆。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接口

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

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

相关文章

浅谈C++|STL之stack+queue+priority_queue篇

一.stack基本概念 栈(Stack)是一种常见的线性数据结构,遵循后进先出(Last-In-First-Out,LIFO)的原则。类似于我们在现实生活中堆叠书本或盘子的方式,最后放入的元素最先被取出。 在栈中&#…

【基于多输出方向的同步异步日志系统】

本项目涉及的到所有源码见以下链接: https://gitee.com/ace-zhe/wz_log 一、项目简介 1.日志的概念(白话版) 日志类似于日记,通常是指对完成某件事情的过程中状态等的记录,而计算机中的日志是指日志数据&#xff0c…

Python实现的mqtt客户端工具分享,小巧且超轻量级(python+tkinter+paho.mqtt)

mqtt协议调试时需要个客户端工具,但网上找的体积包都很大,都不够小巧和便携。于是趁周末时间用python搞出来了个客户端工具,使用pythontinkerpaho.mqtt实现。源码量很少但功能不弱,相当的轻量级。分享给有需要的小伙伴&#xff0c…

论文写作指导手册

TIPS:最近我们上线了“AI写作大师”,后续会继续围绕论文、文章、文案写相关的文章,来验证写作大师能力如何,敬请持续关注( openrabbit.net)~ 一、论文选题 选题是论文研究的第一步&a…

Prometheus+Grafana可视化监控【Nginx状态】

文章目录 一、安装Docker二、安装Nginx(Docker容器方式)三、安装Prometheus四、安装Grafana五、Pronetheus和Grafana相关联六、安装nginx_exporter七、Grafana添加Nginx监控模板 一、安装Docker 注意:我这里使用之前写好脚本进行安装Docker,如果已经有D…

软件测试中常见的难题

1、需求定义: 需求可能不完整或者不准确,这会导致测试人员无法测试应用程序的所有功能。 例如:在一个电子商务网站上,可能需要测试的某些操作并未在需求中列出,导致测试人员无法测试到这些操作。 对策:测…

MySQL实现单个字段根据特定字符拆分

1.字段内容 2.想得到的效果 步骤1中,每一条记录的FJ字段,根据分号,拆分成多条,如下图所示: 3.具体实现 说明: SELECT DISTINCTsubstring_index(substring_index(a.要拆分的字段, 分隔字符, b.help_top…

自动化项目实战:用requests库自动保存王者荣耀英雄皮肤到本地,文末附源码下载!

前言 王者荣耀是一款备受欢迎的手机游戏,拥有众多精美的英雄皮肤。如果你想获取这些皮肤的图片或者其他相关信息,可以利用Python编写一个简单的爬虫来实现。 安装第三方库 首先,我们需要安装Python的requests和BeautifulSoup库。可以使用…

系列六、Nginx配置实例之反向代理2

一、目标 浏览器网页中访问http://${Linux服务器的IP}:9001/basketball/index.html,浏览器中打印"篮球8080!!!"; 浏览器网页中访问http://${Linux服务器的IP}:9001/football/index.html,浏览器中打印"足球8081!!!"&#…

[NLP] LLM---<训练中文LLama2(五)>对SFT后的LLama2进行DPO训练

当前关于LLM的共识 大型语言模型(LLM)使 NLP 中微调模型的过程变得更加复杂。最初,当 ChatGPT 等模型首次出现时,最主要的方法是先训练奖励模型,然后优化 LLM 策略。从人类反馈中强化学习(RLHF&#xff09…

[字符串和内存函数]错误信息报告函数strerror详解

strerror介绍 strerror是一个C库函数,用于将错误代码转换为对的错误信息字符串。它接受一个整数参数errno,返回一个指向错误信息字符串的指针。 errno是一个全局变量,可以直接使用。它在C语言中用于表示发生错误时的错误码。它是一个整数&…

笔记1.4 计算机网络性能

1. 速率 速率即数据率(data rate)或称数据传输速率或比特率 单位时间(秒)传输信息(比特)量 计算机网络中最重要的一个性能指标 单位:bps、kbps、Mbps k 10^3、M 10^6、G 10^9 速率往往…

autosar 诊断入门

AUTOSAR (汽车开放系统架构) 是一个国际汽车行业的开放和标准化的软件架构。它的主要目标是为了创建一种独立于硬件的软件架构,以提高汽车电子系统的模块化和可重用性。 AUTOSAR架构主要分为两个部分:AUTOSAR Runtime Environment (RTE) 和 AUTOSAR Soft…

HTTP各版本差异

HTTP1.0 无法复用连接 HTTP1.0为每个请求单独新开一个TCP连接 #mermaid-svg-9N3exXRS4VvT4bWF {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-9N3exXRS4VvT4bWF .error-icon{fill:#552222;}#mermaid-svg-9N3exXRS…

集成电路运算放大器[23-9-16]

目录 1、结构组成:差分放大电路、电压放大电路、功率放大电路。 2、同相放大器: 3、反相放大器:一个正电压放大并变为负电压。 4、差分放大电路:输入两个不同的电压,两者的差值乘以放大系数得到输 出电压。 1、结构组…

2.策略模式

UML图 代码 main.cpp #include "Strategy.h" #include "Context.h"void test() {Context* pContext nullptr;/* StrategyA */pContext new Context(new StrategyA());pContext->contextInterface();/* StrategyB */pContext new Context(new Strat…

MybatisPlus(5)

前言🍭 ❤️❤️❤️SSM专栏更新中,各位大佬觉得写得不错,支持一下,感谢了!❤️❤️❤️ Spring Spring MVC MyBatis_冷兮雪的博客-CSDN博客 上篇讲了增删的操作,这篇讲修改操作中的一个问题以及它对应的…

002-第一代硬件系统架构确立及产品选型

第一代硬件系统架构确立及产品选型 文章目录 第一代硬件系统架构确立及产品选型项目介绍摘要硬件架构硬件结构选型及设计单片机选型上位机选型扯点别的 关键字: Qt、 Qml、 信号采集机、 数据处理、 上位机 项目介绍 欢迎来到我们的 QML & C 项目&#xff…

Centos8下载安装JDK8

安装JDK8 一、下载 官网:https://www.oracle.com/java/technologies/downloads/#java8-linux 二、存放到opt目录下 三、解压 tar -zxvf jdk-8u361-linux-x64.tar.gz -C /usr/local如果下载的是tar格式,则安装如下命令解压 tar -zvf jdk-8u361-linu…

Flash的学习

Flash的学习 1 概述 2 特性 STM32 的内部FLASH 包含主存储器、系统存储器以及选项字节区域。 2.1 主存储器 主存储器分为256 页,每页大小为2KB,共512KB。这个分页的概念,实质就是FLASH 存储器 的扇区,与其它FLASH 一样&…