面试题汇总(二)容器

2023-11-04

容器

 

18. java 容器都有哪些?

 

常用容器的图录:

 

19. Collection 和 Collections 有什么区别?

 

  • java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。

  • Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

 

 

20. List、Set、Map 之间的区别是什么?

 

 

 

21. HashMap 和 Hashtable 有什么区别?

 

  • hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法。

  • hashTable同步的,而HashMap是非同步的,效率上逼hashTable要高。

  • hashMap允许空键值,而hashTable不允许。

 

22. 如何决定使用 HashMap 还是 TreeMap?

 

对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。基于你的collection的大小,也许向HashMap中添加元素会更快,将map换为TreeMap进行有序key的遍历。

 

23. 说一下 HashMap 的实现原理?

 

HashMap概述: HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变。 

HashMap的数据结构: 在java编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap也不例外。HashMap实际上是一个“链表散列”的数据结构,即数组和链表的结合体。

当我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。

需要注意Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn)

24. 说一下 HashSet 的实现原理?

 

  • HashSet底层由HashMap实现

  • HashSet的值存放于HashMap的key上

  • HashMap的value统一为PRESENT

 

25. ArrayList 和 LinkedList 的区别是什么?

 

最明显的区别是 ArrrayList底层的数据结构是数组,支持随机访问,而 LinkedList 的底层数据结构是双向循环链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。

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

 

  • List转换成为数组:调用ArrayList的toArray方法。

  • 数组转换成为List:调用Arrays的asList方法。

27. ArrayList 和 Vector 的区别是什么?

 

  • Vector是同步的,而ArrayList不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList。 

  • ArrayList比Vector快,它因为有同步,不会过载。 

  • ArrayList更加通用,因为我们可以使用Collections工具类轻易地获取同步列表和只读列表。

 

28. Array 和 ArrayList 有何区别?

 

  • Array可以容纳基本类型和对象,而ArrayList只能容纳对象。 

  • Array是指定大小的,而ArrayList大小是固定的。 

  • Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。

 

29. 在 Queue 中 poll()和 remove()有什么区别?

 

poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回空,但是 remove() 失败的时候会抛出异常。

30. 哪些集合类是线程安全的?

 

  • vector:就比arraylist多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在web应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的。

  • statck:堆栈类,先进后出。

  • hashtable:就比hashmap多了个线程安全。

  • enumeration:枚举,相当于迭代器。

 

31. 迭代器 Iterator 是什么?

 

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

 

32. Iterator 怎么使用?有什么特点?

 

Java中的Iterator功能比较简单,并且只能单向移动:

  

(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。

  

(2) 使用next()获得序列中的下一个元素。

  

(3) 使用hasNext()检查序列中是否还有元素。

  

(4) 使用remove()将迭代器新返回的元素删除。

  

Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

33. Iterator 和 ListIterator 有什么区别?

 

  • Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。 

  • Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。 

  • ListIterator实现了Iterator接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。

34.怎么确保一个集合不能被修改

那么,我们怎么确保一个集合不能被修改?首先我们要清楚,集合(map,set,list…)都是引用类型,所以我们如果用final修饰的话,集合里面的内容还是可以修改的。

我们可以做一个实验:

可以看到:我们用final关键字定义了一个map集合,这时候我们往集合里面传值,第一个键值对1,1;我们再修改后,可以把键为1的值改为100,说明我们是可以修改map集合的值的。

那我们应该怎么做才能确保集合不被修改呢?
我们可以采用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的。他会报 java.lang.UnsupportedOperationException错。

同理:Collections包也提供了对list和set集合的方法。
Collections.unmodifiableList(List)
Collections.unmodifiableSet(Set)

(完)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

面试题汇总(二)容器 的相关文章

  • 软件项目成本估算的基本方法

    一 传统的估算方法 1 至下而上的估算 对工作组成部分进行估算的一种方法 先把工作分解为更细节的部分 再对低层次上每个细节部分所需的投入进行估算 最后汇总得到整个工作所需的总投入 该估算方法的准确性取决于较低层次上的工作的规模和复杂程度 2
  • 初学者必备的3种Python爬虫库

    用Python进行网站数据抓取是我们获取数据的一个重要手段 而在Python中网站抓取有大量的库可以使用 如何选择合适的库用于自己的项目呢 先不直接给出答案 下文所列举的是我认为较为通用的3个Python库 将通过对它们的优劣评估来回答那些
  • 安装tensorflow,非常适用于同时安装了两个python2.x和python3.x两个版本号的(纯干货)

    安装步骤 首先安装anaconda 并且下载好对应的python版本 对于Anaconda中安装一个内置的python版本解析器 其实就是python的版本 根据对应的python版本使用这条命令conda create name tens
  • 【华为OD机试真题】AI处理器组合(java)100%通过率 超详细代码注释 代码深度解读

    华为OD机试真题 2022 2023 真题目录 点这里 华为OD机试真题 信号发射和接收 试读 点这里 华为OD机试真题 租车骑绿道 试读 点这里 AI处理器组合 知识点数组 时间限制 1s空间限制 256MB限定语言 不限 题目描述 某公
  • 数据结构与算法 基础概述 入门必备!

    一 数据的逻辑结构 1 集合结构 结构中的数据元素之间除了同属于一个集合的关系外 再无任何其它关系 2 线性结构 结构中的数据元素之间存在着一对一的线性关系 3 树形结构 结构中的数据元素之间存在着一对多的层次关系 4 图状结构 结构中的数
  • 使用Microsoft Visual Studio提供的DumpBin.exe工具查看DLL导出段

    以VS2008为例说明如何使用DumpBin exe工具 其他版本的使用方式应该一样 可能只是存放位置不同 o o Step1 打开Tools Visual Studio 2008 Command Prompt 打开命令行窗口 Step2
  • 论文阅读-位姿估计-SE3-Nets Learning Rigid Body Motion using Deep Neural Networks

    SE3 Nets Learning Rigid Body Motion using Deep Neural Networks 1 输入 三维点 系统输入 如推力 输出 三维点 该论文只针对三维点云输入 RGBD等 来求解每帧中目标物体的刚体
  • 关于前端动态调试解密签名校验的分享

    首先我们先来看一下 下面这张图是笔者近期测试遇到的问题 那就是程序每次生成请求都会生成signature的验签 该验签生成方式暂不可知 唯一知道的就是用一次就失效 这对测试的成本造成了很不好的影响 那么我们想要突破防护 最起码也要知道 这个
  • 类文件具有错误的版本 55.0, 应为 52.0 

    低版本的jre运行了高版本编译的class 解决办法 更换高版本的jdk即可
  • Python3中collections.OrderedDict介绍

    Python3中的collections模块实现了特定目标的容器 以提供Python标准内建容器dict list set和tuple的替代选择 包括namedtuple deque ChainMap Counter OrderedDict
  • js移除某个样式_以太坊 JavaScript 库:web3.js 与 ethers.js 比较(第一部分)

    Web3 js 和 ethers js 都是 JavaScript 库 其作用是使开发者可以与以太坊区块链交互 这两个库都很实用 都能满足大多数以太坊开发者的需求 本文将重点围绕 web3 js 和 ethers js 的相同点和不同点来对
  • Leetcode 189. 旋转数组(二次反转,环状替换(双临时变量))

    旋转数组 给定一个数组 将数组中的元素向右移动 k 个位置 其中 k 是非负数 示例 1 输入 1 2 3 4 5 6 7 和 k 3 输出 5 6 7 1 2 3 4 解释 向右旋转 1 步 7 1 2 3 4 5 6 向右旋转 2 步
  • 将代码保留原格式(高亮)复制到word

    有时需要保持美观将代码保持语法突出或高亮复制粘贴到word上 一些方法如下 法一 借助网站http www planetb ca syntax highlight word 代码有编号 整体排版精美令人舒适 但语言有限 例如无matlab
  • MySQL数据迁移--思路

    背景 不知道原来有一个A表是专门存储备注信息的 新建了B表 导致同一个存储功能的表分在了两个数据库 表名和字段名不一样 为了后续方便 现在想把B表的数据合并在A表中 因为有一些数据是在A表中已经存在了的 所以A表存在了的就要更新 不存在的就
  • 在Metasploit中使用PostgreSQL

    第一次运行msfconsole时 BT5中的Metasploit会创建名称为msf3dev的PostgreSQL数据库 并生成保存渗透测试数据所需的数据表 然后使用名称为msf3的用户 自动连接到msf3数据库 启动msfconsole后
  • 什么是oc门

    什么是oc门 oc门电路及符号 oc门电路应用 实际使用中 有时需要两个或两个以上与非门的输出端连接在同一条导线上 将这些与非门上的数据 状况 用同一条导线输送出去 因此 需要一种新的与非门 电路来实现线与逻辑 这种门 电路就是集电极开路与
  • FPGA时序约束分享03_input delay约束

    第一章 FPGA时序约束分享03 input delay约束 作者 潘文明 本文章探讨一下FPGA的时序input delay约束 本文章内容 来源于配置的明德扬时序约束专题课视频 FPGA时序约束分享01 约束四大步骤 概括性地介绍 了时
  • 【火炉炼AI】机器学习040-NLP性别判断分类器

    火炉炼AI 机器学习040 NLP性别判断分类器 本文所使用的Python库和版本号 Python 3 6 Numpy 1 14 scikit learn 0 19 matplotlib 2 2 NLTK 3 3 本文的目标是构建一个分类器
  • C++1949到2022的闰年

    include
  • 2012年CSDN高校俱乐部秋季巡讲结案报告

    2012年CSDN高校俱乐部巡讲已经结束 并且得到了来自各地专家的支持 在此对他们深表谢意 同时欢迎更多的讲师加入巡讲 参与到我们的大学生公益组织中 为大学生提供技术知识和人生经验 以下是2012年高校俱乐部秋季巡讲结案报告 巡讲数据及过程

随机推荐

  • SystemVerilog and Verilog X Optimism – Hardware-like X Propagation with Xprop

    原文链接 http www verilogpro com x propagation with vcs xprop August 30 2015 by Jason Yu In part 2 of this series SystemVeri
  • jquery 对象不支持此属性或方法

    本来调用 和jQuery没问题 控制台也可以打印出 和jQuery 但是调用了document write后 出错 对象不支持此属性或方法 控制台也打印不出 了 报同样的错 原因 document write把整个网页重写了 当然就消失了
  • 鸿蒙系统包括8x吗,华为荣耀8X可以升级鸿蒙系统吗?

    开发者大会上 余总表示会逐步在各种设备上部署鸿蒙包括pc 那么目前有没有具体的时间 EMUI 发展到EMUI10 0这一代的时候 基本上跟安卓没了关系 唯一算的上跟安卓有关的就是安卓的内核 除了安卓这个内核 其他的东西全是华为自己的 编译器
  • 计算a+b多组

    计算a b 很多的题目测试数据会有很多组的 一般我们的在线系统没写具体要求的时候 输入是以EOF为结束的 这题的基本框架如下 int main int a b while scanf d d a b EOF 特别注意这行的写法 求和 输出
  • 移动端调试工具vConsole

    安利一款好用的移动端调试工具vConsole vConsole 是腾讯推出的一个轻量 可拓展 针对手机网页的前端开发者调试面板 官网 https alloyteam github io AlloyLever 特性 查看 console 日志
  • 安装虚拟机提示未启动服务器,Hyper-V虚拟机未启动,并触发0x80070057错误

    Hyper V虚拟机未启动 并触发0x80070057错误 09 17 2020 本文内容 本文提供了一个解决方案0x80070057尝试启动虚拟机时发生的错误 适用于 Windows Server 2012R2 原始 KB 编号 3084
  • VSCode 与 WebStorm 横向对比

    https segmentfault com a 1190000020244810
  • Outlook定时/延时发送邮件

    打开邮件撰写界面 需要进入邮件全屏界面 点开Option 选择Delay Delivery 设置需要发送的时间点 该时间与系统时间一致 最后一定要点击发送 使邮件进入待发送箱 否则就delay了一个寂寞 将会在待发送列表里看到这封邮件 以上
  • scp或者ssh报错“no matching host key type found. Their offer: ssh-rsa,ssh-dss“

    scp或者ssh报错 no matching host key type found Their offer ssh rsa ssh dss 原因 OpenSSH 7 0以后的版本不再支持ssh dss DSA 算法 查看ssh版本 ssh
  • 2022年CCCC天梯赛题解

    L1 1今天我要赢 原题链接 代码 include
  • Java中计时函数

    Java计时函数currentTimeMills System currentTimeMills 计时精确到毫秒级 跟计算机以1970年1月1日0时为计时起点一样 该函数方法统计的也是从1970年1月1日0时开始 到程序运行到该函数时刻的毫
  • Parameter 1 of constructor in xxx required a bean of type xxx‘ that could not be found.已经解决

    使用Mybatis Plus 时遇到问题Parameter 1 of constructor in xxx required a bean of type xxx that could not be found 已经解决 错误截图 错误原因
  • FPGA图像处理系列——乒乓球追踪设计实例

    注 本博文将讲解一个FPGA设计图像处理系统实例 此实例的功能为高速追踪乒乓球 读者可以参考本博文的算法思路 工程框架 但博主并不提供工程 当前 实用的图像处理系统都要求高速处理 目前广泛采用软件进行处理 但软件处理存在速度 成本的问题 近
  • MFC中CListCtrl改变选中行(选中列)的颜色实现选中高亮的效果

    在项目中遇到了这样的需求 需要对选中行进行高亮 查了一下相关的资料 记录一下自己采用的方法 先在List控件所在类中 这里是CListshow 继承于CListCtrl 添加两个变量SelectRow和SelectCol 用于保存鼠标点击的
  • QEMU虚拟机中如何安装Virtio驱动

    在计算机虚拟化中 Virtio是一种半虚拟化解决方案 即需要对Guest OS进行一定的修改 安装相应的驱动程序 能够对虚拟机的I O性能进行大幅的提升 在QEMU KVM的环境中 Virtio的后端驱动由QEMU程序提供 不需要额外的安装
  • 不要把领导当成客户

    以客户为中心的思想 几乎在所有公司都会被提及和执行 他的终极目标是和客户达成共赢 但是 并不是所有人都理解了以客户为中心 我今天想说的是来源于我们的一次工作讨论 几位新同事在分享服务案例的时候 提到自己的客户 经常把经理当成客户 他们是这样
  • python3 numpy安装 linux_Centos7安装python3、numpy、scipy、matplotlib、pandas等

    centos 7 已经自带 python 2 7 15 这里需要安装 python 3 root pwm python Python 2 7 15 Anaconda Inc default Dec 14 2018 19 04 19 GCC
  • 图(3)--拓扑排序与关键路径

    一 拓扑排序 1 定义 拓扑排序可以理解为在有向图无环图AOV 网 Activity On Vertex 用图的顶点表示活动 用弧表示活动之间的优先级 中排成一个具有前后次序的线性序列 2 实现方式 1 输入AOV网络 令 n 为顶点个数
  • 谷歌插件下载

    谷歌插件下载 在这个网站 https www extfans com 搜索下载 解压后得到xxx crx文件 将xxx crx后缀名改为xxx zip 解压xxx zip 得到xxx文件夹 在谷歌浏览器扩展程序中加载上面解压的文件夹
  • 面试题汇总(二)容器

    容器 18 java 容器都有哪些 常用容器的图录 19 Collection 和 Collections 有什么区别 java util Collection 是一个集合接口 集合类的一个顶级接口 它提供了对集合对象进行基本操作的通用接口