面试题-容器

2023-11-12

现在新技术迭代非常快,我们一方面要学习掌握更多的新技术,同时我们需要不断的巩固已学的知识,一点点的知识积累终会变成质的飞跃。现在我就想来总结一下java一些常用的面试题。

原文:https://blog.csdn.net/sufu1065/article/details/88051083

参考文章

    文章1

一.容器 

18.java 容器都有哪些?

答:数组 ,String  util包下的集合类。

       数组长度限制为 Integer.Integer.MAX_VALUE;String的长度限制: 底层是char 数组 长度 Integer.MAX_VALUE 线程安全的

       util包下的所有集合类:

      详细地址解释: https://blog.csdn.net/qq_37358860/article/details/100515612

19.Collection 和 Collections 有什么区别? 

  答:Collection是集合类的上级接口,collection下有List Set,它提供了对集合对象进行基本操作的通用接口方法。

         Collections是集合类的帮助类,可对集合类进行排序等操作。

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

 答: List. 中的元素可重复,有序。  List 分为ArrayList 和LinkedList Vector。  ArrayList 底层是数组,LinkedList底层是链表 ,                      ArrayList 增删慢,查询快,LinkedList 增删快,查询慢,ArrayList 更加适用于随机访问数据的情况,LinkedList更                        加适用于在集合里多次增删的情况,ArrayList 和LinkedList线程不安全,而Vector线程安全。

         Set 中的元素,不可重复,Set 分为HashSet 和TreeSet,LinkedHashSet。HashSet底层是哈希表,主要依赖hashcode() 和                  equals()俩个方法 ,TreeSet底层是二叉树,元素有顺序。

         Map 主要是根据键值对进行存储数据, 根据键查询对应的值,Map 分为HashMap HashTable LinkedHashMap TreeMap                      HashMap只允许一个key为null ,多条记录为null,  HashMap中的元素不可重复,且没有顺序,线程不同步。                                     LinkedHashMap中的元素有顺序 保留了元素的插入顺序,HashTable线程同步,无序,不允许输入的键值为null。

                 TreeMap 底层是二叉树,实现sortMap 接口,元素有序。

       详细地址解释: https://blog.csdn.net/tangthh123/article/details/104112865

                                 https://blog.csdn.net/qq_35606010/article/details/99243705

21.HashMap 和 HashTable 有什么区别? 

答: 1.HashMap 是线程不安全的,HashTable 是线程安全的 。

        2.HashMap继承AbstractMap类。HashTable继承自Dictionary类,但二者都实现了Map接口 。

        3.HashTable不允许null值(key和value都不可以),HashMap允许使用null值(key和value)都可以。这样的键只有一个,             可以有一个或多个键所对应的值为null。

       4.HashMap使用Iterator进行遍历,HashTable使用Enumeration遍历。

          等等。

       详细地址解释:https://www.cnblogs.com/williamjie/p/9099141.html

                                https://blog.csdn.net/qq_34602647/article/details/81671067

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

答:1. HashMap 中的元素没有顺序,而TreeMap中的元素有顺序,HashMap和TreeMap都不是线程安全的。

       2. HashMap继承AbstractMap类;覆盖了hashcode() 和equals() 方法,以确保两个相等的映射返回相同的哈希值,而                       TreeMap继承SortedMap类;他保持键的有序顺序;

       3.HashMap:基于hash表实现的;使用HashMap要求添加的键类明确定义了hashcode() 和equals() (可以重写该方法);            为了优化HashMap的空间使用,可以调优初始容量和负载因子,  TreeMap:基于红黑树实现的;TreeMap就没有调优选              项,因为红黑树总是处于平衡的状态。

      4.HashMap的遍历是随机的,而TreeMap的遍历是有顺序的。

      5.HashMap只允许键值均为null,而TreeMap 不允许键值为null。

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

    答:HashMap基于hashing原理,我们通过put()和get()方法存储和获取对象。当我们将键值对传给put()方法时;它调用键对象             的hashCode()方法来计算hashCode,然后找到bucket位置来存值对象。当获取对象时,通过键值对的equals()方法来找               到正确的键值对。然后返回值对象。HashMap使用链表来解决碰撞问题,当发生碰撞时,对象会存储在链表的下一个节               点。hashMap在每个链表的阶段存储键值对对象。当两个不同的键对象hashCode相同时会发生什么?他们会存储在同一              个bucket位置的链表中。建对象的equals()方法用来找到键值对。

           工作原理: Map的put(key,value) 来存储元素,通过get(key) 来得到value值,通过hash算法来计算hashcode值,用                                        hashcode 标识Entry在bucket中的位置,存储结构计算哈希表等。

   详细地址解释https://blog.csdn.net/vking_wang/article/details/14166593 

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

 答:HashSet是基于HashMap实现的,HashSet 底层使用HashMap来保存所有元素,因此HashSet 的实现比较简单,相关                   HashSet 的操作,基本上都是直接调用底层HashMap的相关方法来完成,HashSet不允许有重复的值,并且元素是无序               的。

   详细地址解释:https://blog.csdn.net/itmyhome1990/article/details/76212556 

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

答: ArrayList底层是数组,LinkedList底层是链表。ArrayList和LinkedList都是线程不安全的,ArrayList更加查询快,增删慢,而         LinkedList 增删快,查询慢。

       详细地址解释:  https://blog.csdn.net/TTTZZZTTTZZZ/article/details/84916281

                                   https://blog.csdn.net/qq_33300026/article/details/79232006

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

答:

         List转数组:toArray(arraylist.size()方法

         数组转List:Arrays的asList(a)方法

         详细地址解释:https://blog.csdn.net/qq_31840023/article/details/87111279

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

答:1.Vector中的方法大多加了sychronized关键字,因而是线程安全的,而ArrayList 是线程不安全的。

       2. Vector是线程不安全的,因而影响效率,ArrayList 的效率高于Vector。

       3.ArrayList以1.5倍的方式在扩容。Vector 当扩容容量增量大于0时、新数组长度为原数组长度+扩容容量增量、否则新数组              长 度为原数组长度的2倍。

       4.当Vector或ArrayList中的元素超过它的初始大小时,Vector会将它的容量翻倍,而ArrayList只增加50%的大小,

          这样,ArrayList 就有利于节约内存空间。

       共同点:ArrayList和Vector都是继承了相同的父类(AbstractList )和实现了相同的接口(List),底层都是数组                                        (Object[])实现的,初始默认长度都为10。
 

          详细地址解释: https://blog.csdn.net/weixin_43287508/article/details/88065284

28.Array 和 ArrayList 有何区别? 

答:Array(数组)里面存储的可以有基本类型和对象类型,而ArrayList里面存储对象类型。

       Array 数组的空间大小是固定的,所以需要事前确定合适的空间大小,而ArrayList 的空间是动态增长的,而且,每次添加新的           元 素的时候都会检查内部数组的空间是否足够

 详细地址解释 : https://blog.csdn.net/g1998i/article/details/79663976

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

 答:队列是一个典型的先进先出的容器,队列有俩种实现方式,一个是LinkedList,一个是PriorityQueue。

       poll()和remove()     都是返回第一个元素,并在队列中删除返回的对象。,但是在poll()在队列为空时返回null,而remove()           会 抛出NoSuchElementException异常。

       详细地址解释:https://www.jianshu.com/p/7c2878c78207 

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

答: vector   ,HashTable  statck:堆栈类,先进后出  enumeration:枚举,相当于迭代器 

      详细地址解释:https://blog.csdn.net/u013239236/article/details/51005976

31.迭代器 Iterator 是什么? 

答:链接:https://www.nowcoder.com/questionTerminal/8863f297b1fc4bbca6de95528b6051e1来源:牛客网

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

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

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

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

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

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

 引自:https://blog.csdn.net/meism5/article/details/89917376

 33.Iterator 和 ListIterator 有什么区别?

 引自:https://blog.csdn.net/xiangyuenacha/article/details/84253630

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

刚看到这个题目的我的第一想法就是用final关键字修饰,因为final修饰引用类型的时候,引用地址不变,但是里面的内容其实是可以改变的。此时我们可以使用Collections包下的unmodifiableMap方法,通过这个方法返回的map,是不可以修改的。

示例代码:https://blog.csdn.net/syilt/article/details/90548237 

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

面试题-容器 的相关文章

  • 日期语句之间的 JPQL SELECT [关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我想将此 SQL 语句转换为等效的 JPQL SELECT FROM events WHERE events date BETWE
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 为 java 游戏创建交互式 GUI

    大家好 我正在创建一个类似于 java 中的 farmville 的游戏 我只是想知道如何实现用户通常单击以与游戏客户端交互的交互式对象 按钮 我不想使用 swing 库 通用 Windows 看起来像对象 我想为我的按钮导入自定义图像 并
  • 过滤两次 Lambda Java

    我有一个清单如下 1 2 3 4 5 6 7 和 预期结果必须是 1 2 3 4 5 6 7 我知道怎么做才能到7点 我的结果 1 2 3 4 5 6 我也想知道如何输入 7 我添加了i gt i objList size 1到我的过滤器
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 没有 Spring 的自定义 Prometheus 指标

    我需要为 Web 应用程序提供自定义指标 问题是我不能使用 Spring 但我必须使用 jax rs 端点 要求非常简单 想象一下 您有一个包含键值对的映射 其中键是指标名称 值是一个简单的整数 它是一个计数器 代码会是这样的 public
  • java.lang.IllegalStateException:提交响应后无法调用 sendRedirect()

    这两天我一直在尝试找出问题所在 我在这里读到我应该在代码中添加一个返回 我做到了 但我仍然得到 java lang IllegalStateException Cannot call sendRedirect after the respo
  • 无法创建请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

    我是 Hibernate 的新手 我目前正在使用 Spring boot 框架并尝试通过 hibernate 创建数据库表 我知道以前也问过同样的问题 但我似乎无法根据我的环境找出如何修复错误 休眠配置文件
  • 将 MOXy 设置为 JAXB 提供程序,而在同一包中没有属性文件

    我正在尝试使用 MOXy 作为我的 JAXB 提供程序 以便将内容编组 解组到 XML JSON 中 我创建了 jaxb properties 文件 内容如下 javax xml bind context factory org eclip
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何对不同的参数类型使用相同的java方法?

    我的问题 我有 2 个已定义的记录 创建对象请求 更新对象请求 必须通过实用方法进行验证 由于这两个对象具有相同的字段 因此可以对这两种类型应用相同的验证方法 现在我只是使用两种方法进行重载 但它很冗长 public record Crea
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 关键字“table”附近的语法不正确,无法提取结果集

    我使用 SQL Server 创建了一个项目 其中包含以下文件 UserDAO java public class UserDAO private static SessionFactory sessionFactory static se
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • 如果没有抽象成员,基类是否应该标记为抽象?

    如果一个类没有抽象成员 可以将其标记为抽象吗 即使没有实际理由直接实例化它 除了单元测试 是的 将不应该实例化的基类显式标记为抽象是合理且有益的 即使在没有抽象方法的情况下也是如此 它强制执行通用准则来使非叶类抽象 它阻止其他程序员创建该类
  • 如何防止在Spring Boot单元测试中执行import.sql

    我的类路径中有一个 import sql 文件 其中包含一些 INSERT 语句 当使用 profile devel 运行我的应用程序时 它的数据被加载到 postgres 数据库中 到目前为止一切正常 当使用测试配置文件执行测试时 imp

随机推荐

  • 第十四届全国大学生信息安全竞赛部分wp

    第十四届全国大学生信息安全竞赛部分wp 前言 MISC Robot 补充用PIL写法 misc running pixel Misc tiny traffic 隔空传话 密码学RSA web1 Re1 web2 总结 前言 第一次参加国赛
  • Pysyft学习笔记四:MINIST数据集下的联邦学习(并行训练与非并行训练)

    目录 手写数字识别模型 非并行训练 概述图 导入基本包 创建客户机 设置训练参数 初始化数据集 搭建神经网络模型 定义训练与测试函数 定义主函数 训练效果 手写数字识别模型 并行训练 概述图 导入必要的包 建立客户机 初始化训练参数 定义训
  • Swift - 类扩展, 添加属性

    类扩展 为类添加属性 如代码所示 创建属性 并实现set和get方法 利用OC的runtime特性 private var kHJRefreshHeaderKey String header var hj header HJRefreshH
  • AR+ADAS 如何改变汽车行业

    来源 basemark 在过去的几年里 ADAS彻底改变了汽车行业 使驾驶比以往任何时候都更安全 更方便 然而 在很多时候消费者对此并没有太多信任 这限制了 ADAS 技术的潜在有效性和更广泛的采用 根据美国汽车协会的年度自动驾驶汽车调查
  • 如何避免问卷里的哪些“坑”?多的是你不知道的事

    学术研究中 通过问卷收集数据 进行分析的情况越来越多 但在问卷收集数据时 难免会出现填写者乱填 或者不知道如何填写等 最终导致收集数据不准确 研究结论不可靠等问题 如果问卷收集数据不准确 通常会带来数据信度和效度的影响 单独从肉眼看数据都挺
  • 引领新一轮IT服务升级,IT相关场景RPA应用

    大量实践表明 在企业IT项目的生命周期中 大约80 的时间与IT项目运营维护有关 而该阶段的投资仅占整个IT投资的20 由此形成了典型的 轻服务 重技术 现象 Gartner的一项调查发现 在经常出现的问题中 来自技术或产品 包括硬件 软件
  • 题目 1040: [编程入门]实数的打印

    一个实数 float范围 输出格式 输出3行 第一行打印一遍输入的数 第二行打印两遍 第三行打印三遍 第二行和第三行 用空格分隔同一行的数字 实数用 6 2f 格式输出 样例输入 复制 0 618 样例输出 复制 0 62 0 62 0 6
  • ip地址中斜杠(/)含义

    在网络中 斜杠 符号用于表示CIDR Classless Inter Domain Routing 标记法中的网络前缀长度 CIDR标记法是一种用于表示IP地址和子网掩码的简化方法 在CIDR标记法中 IP地址由两部分组成 网络地址和主机地
  • 无密码绕过!黑客利用ChatGPT劫持Facebook账户

    Dark Reading 网站披露 3 月 3 日 3 月 9 日 每天至少有 2000 人从 Google Play 应用商店下载 快速访问 ChatGPT 的 Chrome 恶意扩展 据悉 一名威胁攻击者可能利用该恶意扩展泄露包括商业账
  • Java获取当前时间的前一天

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 1 获取当前时间的前一天 SimpleDateFormat sdf new SimpleDateFormat yyyy MM dd Date date new Date C
  • JVM三大核心区域

    Heap Area 存储的全部都是Object对象实例 对象实例中一般包含了其数据成员以及与该对象对应的Class信息 一个JVM实例在运行的时候只有一个Heap区域 该区域被所有的线程共享 Method Area 方法区又名静态成员区域
  • 基于java的智能停车场管理系统

    背景 智能停车场管理系统的主要使用者分为管理员和用户 实现功能包括管理员 个人中心 用户管理 车位信息管理 车位租用管理 车位退租管理 违规举报管理 论坛交流 系统管理 用户 个人中心 车位租用管理 车位退租管理 违规举报管理 我的收藏管理
  • Tcpdump的用法及使用案例

    转载自此 Tcpdump工具是Unix和linux系统抓网络数据库包最有效的工具 windows上类似的工具是wireshark tcpdump可以将网络中传送的数据包的 头 完全截获下来提供分析 它支持针对网络层 协议 主机 网络或端口的
  • git cherry-pick gerritID shell脚本解析

    bin bash while read line 读取导入文件的每行到变量 line直到文件结尾 do Name echo line awk print 2 awk 输出 line对应那行的第二列 ChangeID echo line aw
  • linux命令行操作以及目录操作

    目录 一 linux命令行操作以及目录操作 1 Shell 1 linux的操作界面常称为Shell 2 概念 3 查看Shell类型 4 查看当前默认的Shell 5 Shell提示符 6 登录字符终端和图形终端方法 2 使用桌面访问命令
  • burp suite 进行webshell上传

    主要功能 burp suite 可以将客户端与服务器之间传输的数据进行拦截 然后对数据进行修改并在此发送 从而完成攻击设置代理服务器 Proxy Options listeners中 可设置默认的监听IP地址的端口号 建议用Firefox
  • PyCharm中如何安装第三方库?

    PyCharm中如何安装第三方库 一 在安装之前 你如何知道你的系统已经安装了哪些库 1 在window的资源管理器 查找Python安装目录 2 在PyCharm 集成编辑器中 3 在设置中 二 安装模块的方法 1 在IDE编写代码时 我
  • XML——XML介绍和基本语法

    1 XML历史 gml 1969 gt sgml 1985 gt html 1993 gt xml 1998 1969 gml 通用标记语言 主要目的是要在不同的机器之间进行通信的数据规范 1985 sgml 标准通用标记语言 1993 h
  • ChatGPT迎来史诗级iPhone时刻!IOS版ChatGPT首发体验!免费、响应快、新增语音识别

    OpenAI昨晚正式发布了ChatGPT的iOS版App 官方版ChatGPT正式杀入移动手机端 各类山寨App恐将失业 dog 现在你已经可以在App Store中下载该应用了 这款App的名称为 OpenAI ChatGPT 我第一时间
  • 面试题-容器

    现在新技术迭代非常快 我们一方面要学习掌握更多的新技术 同时我们需要不断的巩固已学的知识 一点点的知识积累终会变成质的飞跃 现在我就想来总结一下java一些常用的面试题 原文 https blog csdn net sufu1065 art