面试题-容器

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(使用前将#替换为@)

面试题-容器 的相关文章

  • 在 JTable 中使用自定义 TablecellRenderer

    我是 Java 新手 我创建了一个JTable 就是这样addRow当我尝试向表中添加一行时 该方法有效 private void addTableRow String type String name String rank String
  • cygwin有java sdk吗?

    cygwin有java sdk吗 如果有一个使用 cygwin 文件系统和 X windows 进行显示的本机 cygwin 实现 那就太好了 不幸的是我不知道这样的版本 我认为移植 OpenJDK 也需要付出很大的努力 但我还没有尝试过
  • Java 8 中异常类型推断的一个独特功能

    在为该网站上的另一个答案编写代码时 我遇到了这个特性 static void testSneaky final Exception e new Exception sneakyThrow e no problems here nonSnea
  • Java JNDI 名称 java:/

    我正在遵循教程 https docs oracle com javase tutorial jndi index html https docs oracle com javase tutorial jndi index html 我的冒险
  • 如何将 ArrayList 中的所有值相加或转换为 ArrayList

    我试图将 ArrayList 中的所有值相加 但没有任何方法可以让我得到总和 我必须找到从文本文件中提取的数字的平均值 public static void main String args throws IOException File
  • LibGDX 闪烁

    我已经使用 LibGDX UI 设置来启动一个项目 我在实现 ApplicationListener 中唯一拥有的是 public void create setScreen new LoadingScreen this 这应该会触发 Lo
  • 声纳要求将这一领域定为最终目标

    我的程序中有以下代码 在与 Maven 集成后 我正在运行 SonarQube 5 对其进行代码质量检查 我面临这个错误 将此 public static processStatus 字段设为最终字段 将此 public static pr
  • 如何在不使用反射的情况下查看对象是否是数组?

    在Java中如何在不使用反射的情况下查看对象是否是数组 如何在不使用反射的情况下迭代所有项目 我使用 Google GWT 所以不允许我使用反射 我很想在不使用反射的情况下实现以下方法 private boolean isArray fin
  • 如何使用jdbc驱动编写事务?

    我想使用 jdbc 编写一个事务java 我尝试过这个简单的交易 BEGIN TRANSACTION NL GO NL UPDATE table SET col test where id 1010 NL GO NL COMMIT 我尝试过
  • SQLiteAssetHelper 甚至在从资产文件夹复制数据库之前就导致立即崩溃

    https github com jgilfelt android sqlite asset helper https github com jgilfelt android sqlite asset helper 我要从SQLiteOpe
  • 在仔细锁定但不受信任的代码上使用 Thread.stop()

    我知道Thread stop 已被弃用 并且有充分的理由 它通常不安全 但这并不意味着它是never安全 据我所知 在我想要使用它的上下文中它是安全的 而且 据我所知 我别无选择 上下文是一个两人策略游戏的第三方插件 以国际象棋为例 第三方
  • 当对话框打开时如何处理屏幕方向变化?

    我有一个 Android 应用程序 它已经在处理方向的更改 即有一个android configChanges orientation 在清单和onConfigurationChange 活动中的处理程序切换到适当的布局并准备它 我有一个横
  • 什么会导致“IO错误java.net.SocketException:选择失败”?

    我的笔记本电脑上运行一个服务器程序 相同的路由器和相同的代码 它工作正常 客户端可以连接 然而 当我将工作区复制到我的电脑并运行它时 我得到了这样的废话 IO错误java net SocketException 选择失败 这是代码 publ
  • 使用 Jboss7 加载资源返回 null

    如何使用Jboss7 1从java代码中加载图像等资源 这曾经与 Jboss4 一起使用 this getClass getClassLoader getResourceAsStream myapp includes images imag
  • 如何解决声纳中的 dodgy:unchecked/unconfirmedcast 问题?

    我在下面的代码中通过声纳获得异常 我该如何解决这个问题 建议我 Override public boolean validate BaseInfo infoObject boolean isValid true AckTransferPay
  • 使用mapstruct映射不同类型列表的元素

    我们正在映射一个对象 该对象具有一个对象列表 这些对象都实现了父接口 但可能具有不同的实现 但当我们映射列表时 似乎只有来自 ParentClass 的值被映射 而不是来自子类的值 但直接映射子进程就可以了 public class Par
  • jsch - 发送特殊键(CTRL-C、CTRL-D 等)

    我需要向远程终端发送特殊密钥 如何使用 JSCH 做到这一点 Thanks Walter 尝试发送两个字节 0x03 0x04 Check ASCII 表 http www bbdsoft com ascii html了解更多
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • 如何在java中进行多处理,以及预期的速度提升是多少?

    我是一个新手 使用 Java 对 csv 文件进行一些数据处理 为此 我使用 Java 的多线程功能 线程池 将 csv 文件批量导入到 Java 中 并对每一行执行一些操作 在我的四核处理器上 多线程大大加快了处理速度 我很想知道多处理如
  • Java GridBagConstraints gridx 和 gridy 不工作?

    我正在尝试使用gridx and gridy定位我的按钮的约束 但它们不起作用 如果我改变gridx and gridy变量 什么也没有发生 如果我将填充更改为GridBagConstraints to NONE 仍然不行 我在这里错过了什

随机推荐

  • 第十四届全国大学生信息安全竞赛部分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