10个经典的java集合面试题,看你能否答得上来?

javastack javastack     2023-03-18     438

关键词:

来源:龚雪
http://dwz.win/B27

这里有10个经典的Java面试题,也为大家列出了答案。这是Java开发人员面试经常容易遇到的问题,相信你了解和掌握之后一定会有所提高。

让我们一起来看看吧。

1.Java的HashMap是如何工作的?

HashMap是一个针对数据结构的键值,每个键都会有相应的值,关键是识别这样的值。

HashMap 基于 hashing 原理,我们通过 put ()和 get ()方法储存和获取对象。当我们将键值对传递给 put ()方法时,它调用键对象的 hashCode ()方法来计算 hashcode,让后找到 bucket 位置来储存值对象。

当获取对象时,通过键对象的 equals ()方法找到正确的键值对,然后返回值对象。HashMap 使用 LinkedList 来解决碰撞问题,当发生碰撞了,对象将会储存在 LinkedList 的下一个节点中。HashMap 在每个 LinkedList 节点中储存键值对对象。

2.什么是快速失败的故障安全迭代器?

快速失败的Java迭代器可能会引发ConcurrentModifcationException在底层集合迭代过程中被修改。故障安全作为发生在实例中的一个副本迭代是不会抛出任何异常的。

快速失败的故障安全范例定义了当遭遇故障时系统是如何反应的。例如,用于失败的快速迭代器ArrayList和用于故障安全的迭代器ConcurrentHashMap。

3.Java BlockingQueue是什么?

Java BlockingQueue是一个并发集合util包的一部分。BlockingQueue队列是一种支持操作,它等待元素变得可用时来检索,同样等待空间可用时来存储元素。

另外,大家可以关注微信公众号:Java技术栈,在后台回复:面试,可以获取我整理的 N 篇 Java 面试题干货。

4.什么时候使用ConcurrentHashMap?

在问题2中我们看到ConcurrentHashMap被作为故障安全迭代器的一个实例,它允许完整的并发检索和更新。当有大量的并发更新时,ConcurrentHashMap此时可以被使用。

这非常类似于Hashtable,但ConcurrentHashMap不锁定整个表来提供并发,所以从这点上ConcurrentHashMap的性能似乎更好一些。所以当有大量更新时ConcurrentHashMap应该被使用。

5.哪一个List实现了最快插入?

LinkedList和ArrayList是另个不同变量列表的实现。ArrayList的优势在于动态的增长数组,非常适合初始时总长度未知的情况下使用。LinkedList的优势在于在中间位置插入和删除操作,速度是最快的。

LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

ArrayList实现了可变大小的数组。它允许所有元素,包括null。每个ArrayList实例都有一个容量(Capacity),即用于存储元素的数组的大小。这个容量可随着不断添加新元素而自动增加,但是增长算法并没有定义。当需要插入大量元素时,在插入前可以调用ensureCapacity方法来增加ArrayList的容量以提高插入效率。

6.Iterator和ListIterator的区别

●ListIterator有add()方法,可以向List中添加对象,而Iterator不能。

●ListIterator和Iterator都有hasNext()和next()方法,可以实现顺序向后遍历,但是ListIterator有hasPrevious()和previous()方法,可以实现逆向(顺序向前)遍历。Iterator就不可以。

●ListIterator可以定位当前的索引位置,nextIndex()和previousIndex()可以实现。Iterator没有此功能。

●都可实现删除对象,但是ListIterator可以实现对象的修改,set()方法可以实现。Iierator仅能遍历,不能修改。

7.什么是CopyOnWriteArrayList,它与ArrayList有何不同?

CopyOnWriteArrayList是ArrayList的一个线程安全的变体,其中所有可变操作(add、set等等)都是通过对底层数组进行一次新的复制来实现的。相比较于ArrayList它的写操作要慢一些,因为它需要实例的快照。

CopyOnWriteArrayList中写操作需要大面积复制数组,所以性能肯定很差,但是读操作因为操作的对象和写操作不是同一个对象,读之间也不需要加锁,读和写之间的同步处理只是在写完后通过一个简单的‘=‘将引用指向新的数组对象上来,这个几乎不需要时间,这样读操作就很快很安全,适合在多线程里使用,绝对不会发生ConcurrentModificationException ,因此CopyOnWriteArrayList适合使用在读操作远远大于写操作的场景里,比如缓存。

8.迭代器和枚举之间的区别

如果面试官问这个问题,那么他的意图一定是让你区分Iterator不同于Enumeration的两个方面:

●Iterator允许移除从底层集合的元素。

●Iterator的方法名是标准化的。

9.Hashmap如何同步?

当我们需要一个同步的HashMap时,有两种选择:

●使用Collections.synchronizedMap(..)来同步HashMap。

●使用ConcurrentHashMap的

这两个选项之间的首选是使用ConcurrentHashMap,这是因为我们不需要锁定整个对象,以及通过ConcurrentHashMap分区地图来获得锁。

10.IdentityHashMap和HashMap的区别

IdentityHashMap是Map接口的实现。不同于HashMap的,这里采用参考平等。

●在HashMap中如果两个元素是相等的,则key1.equals(key2)

●在IdentityHashMap中如果两个元素是相等的,则key1 == key2

推荐去我的博客阅读更多:

1.Java JVM、集合、多线程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架构、阿里巴巴等大厂最新面试题

觉得不错,别忘了点赞+转发哦!

50道java集合经典面试题(收藏版)(代码片段)

前言来了来了,50道Java集合面试题也来啦~已经上传github:https://github.com/whx123/JavaHome1.Arraylist与LinkedList区别可以从它们的底层数据结构、效率、开销进行阐述哈ArrayList是数组的数据结构,LinkedList是链表的数据结构。随机访问的时... 查看详情

10个经典又容易被人疏忽的jvm面试题

前言整理了10个经典又容易被疏忽的JVM面试题,谢谢阅读,大家加油哈github地址,感谢每颗star❝https://github.com/whx123/JavaHome❞公众号:「捡田螺的小男孩」1.对象一定分配在堆中吗?有没有了解逃逸分析技术ÿ... 查看详情

面试题经典版(代码片段)

面试题一、JAVA基础1.==和equals的区别?2.说说抽象类和接口3.重写和重载的区别4.public,protected,private的作用范围5.常见的异常类有哪些?6.什么是反射?有什么作用?7.你知道java8的新特性吗,请简... 查看详情

几个面试经典算法题java解答(代码片段)

                 几个面试经典算法题Java解答题目一:publicclasstestClockwiseOutput//顺时针打印一个矩阵@Testpublicvoidtest()int[][]num=newint[100][100];intn=4;intcount=1;for(inti=0;i<n;i++ 查看详情

69个经典java面试题和答案详解,附相关架构及资料

腾讯一面(支付)1.jqc的介绍2.如何确保多台机器不会重复消费3.如何确保消费了反馈失效问题(用事务管理,先储存再消费,失败就回滚)4.如何防止数据库单点问题8.paxos算法9.raft算法10.spring的aop实现11.三... 查看详情

数据结构与算法(java版)|几个经典的算法面试题(下)(代码片段)

上一讲,我给大家介绍了两个经典算法面试题,即字符串匹配问题和汉诺塔游戏,这一讲,我再来给大家介绍两个经典算法面试题,它们就是八皇后问题和马踏棋盘算法,注意,马踏棋盘算法也被称为... 查看详情

09经典面试题深度解析(代码片段)

一、背景本节主要聊一聊Java集合、多线程、虚拟机和源码等部分典型面试题,这一块是面试的重点,希望大家认真准备。需要提醒大家的是:(1)一定要结合源码来理解,如果你只是“背诵答案”,很多知识点理解都是似是而... 查看详情

(转)40个java集合面试问题和答案

Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。另外,码农网之前也整理过一篇关于Java集合面试题的文章:大公司最喜欢问的Java集合类面试题1.Java集... 查看详情

java程序员面试题大全含答案(2018--2019)

java程序员面试题大全含答案(2018--2019)1、10道经典java面试题_实习生必问!2、15个Java线程并发面试题和答案3、15个高级Java多线程面试题及回答4、2018年java分布式相关最新面试题5、2018最新java技术面试题与答案6、4个Spring常见面... 查看详情

java集合面试题看这篇就够了(代码片段)

备战实习,会定期的总结常考的面试题,大家一起加油!🎯往期文章:【面试题】计算机网络篇-10道常见面试题p1【面试题】JVM篇-10道常见面试题p1【面试题】Java并发篇-10道常见面试题p1【面试题】Java基础篇-... 查看详情

69个经典java面试题和答案详解,手慢无

01阿里中间件(四面,Java岗)1.1Java中间件一面技术一面考察范围重点问了Java线程锁:synchronized和ReentrantLock相关的底层实现线程池的底层实现以及常见的参数数据结构基本都问了一遍:链表、队列等Java内存模... 查看详情

118道android经典基础面试题整理,你能否全部答上?(代码片段)

前言有许多Android开发者面试时,总被一些题所卡壳,就吐槽面试官问的题很变态,其实我个人认为原因是每个人基础知识掌握的程度不同,有些题可能你觉得难,但别人可以轻易的答出,有些你答的出ÿ... 查看详情

hashmap的几个问题,看看你都答得上来吗?

某一天你接到一个公司的面试邀请,去参加面试。面试官问你:HashMap熟悉吗?答:熟悉的,经常用。HashMap的底层是什么?答:数组+链表+红黑树。简单讲一下HashMap的实现原理!?答:嗯先用hash算法计算插入位置,然后插入到对... 查看详情

数据结构与算法(java版)|关于以上几个经典算法面试题的一个小结(代码片段)

为了让大家明白算法的重要性,以上我就列举了几个经典的算法面试题,我的目的也很简单,就是希望引起大家对算法的一个兴趣。之所以在正式讲解数据结构与算法之前就引出这几个经典的算法面试题,是因为... 查看详情

linux命令经典面试题:统计文件中出现次数最多的前10个单词

文章目录一、统计文件中出现次数最多的前10个单词二、linux文件搜索关键字并显示前后10行三、cat、grep、sed查看文件任意几行的数据一、统计文件中出现次数最多的前10个单词使用linux命令或者shell实现:文件words存放英文单... 查看详情

10万字208道java经典面试题总结(附答案,建议收藏)

前言最近有很多粉丝问我,有什么方法能够快速提升自己,通过阿里、腾讯、字节跳动、京东等互联网大厂的面试,我觉得短时间提升自己最快的手段就是背面试题,最近总结了Java常用的面试题,分享给大家&... 查看详情

java面试题及答案,2020年最新面试题集合

...gCloud、RabbitMQ、Kafka、Linux等技术栈,一共有上百个面试题集合,资源难得,而且还是近一年的真实面试题; 由于面试题答案太多我已经整理成文档,都上传到网盘了; 面试题 查看详情

面试官问spring,一个问题就趴下了?16个经典面试题

1.什么是Spring?有哪些优点?Spring是个Java企业级应用的开源开发框架,主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用,目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的... 查看详情