2021年Java集合面试Top问题 - 第二部分

压力测
• 阅读 1404
原文:https://dzone.com/articles/to...
作者: Sonia Mathias
翻译: 祝坤荣

对有经验开发者的常见问题

问题1:什么是CopyOnWriteArrayList?

答:这个类在java.util.concurrent包中且实现了list接口。它内建了一个内部ArrayList的克隆副本来实现所有的操作和修改。它很安全并且在迭代中永远不会抛出ConcurrentModificationException。

问题2:ConcurrentModificationException什么时候会发生?

答:当数据集在使用时尝试做出修改会抛出java.util.ConcurrentModificationException,也就是当我们在进行数据集的迭代时进行修改。

问题3: 为什么ConcurrentHashmap比Hash table或Synchronized maps更好?

答:ConcurrentHashMap可以被安全的使用在多线程环境中。它的性能比问题中提到的两个更好,因为ConcurrentHashMap中只有一小部分会被锁,而Hashtable和SynchronizedMap则整个都会被锁。

问题4: 解释一下diamond操作符(也就是<>)。

答:diamond操作符帮编译器收集泛化类的参数类型。在Java SE中,开发者可以用一个空的参数集(<>)来代替参数化的构造函数,这就是diamond操作符。

问题5: 当要在集合类中使用一个自定义的对象来当主键时需要做什么?

答:如果在Map中使用了自定义的对象作为主键,你需要覆写equals()和hashCode()方法。从另一方面,如果你在一个排过序的集合中使用自定义对象,你还要保证你的equals()方法与compareTo()方法是一致的。

问题6:解释一下iterator与collection集合。

答:Iterator只能通过next()方法来移动和读取下一个元素,remove()也是一样。Collection,可以通过add(),iterator(),remove()和clear()来添加,iterate,删除和清楚整个数据结构。同时其也有一些boolean方法。由于Iterator相对于collection有更少的操作所以它更快。

问题7: 列出一些HashSet的特性。

答:HashSet实现了Set接口。底层的数据结构是Hashtable。允许Null元素,重复的元素是不允许的。对象是基于它们的hashcode被插入的。

问题8: 解释下fail-fast与fail-safe的不同

答:
Fail-fast

  • 使用了原生collection来遍历
  • 当迭代进行时不能修改集合
  • 会抛出ConcurrentModicationException异常

Fail-safe

  • 使用了原生集合的复制版进行遍历
  • 在迭代进行中可以修改集合
  • 不会抛出任何异常

问题9:ArrayBlockingQueue与LinkedBlockingQueue的不同

答:
ArrayBlockingQueue

  • 有界阻塞队列将元素存储在数组中
  • 更高的吞吐
  • 使用single-lock double算法

LinkedBlockingQueue

  • 基于linked节点实现的可选的有界阻塞队列
  • 比较低的吞吐
  • 使用two-lock queue算法

问题10:Java的TreeMap怎么样?你更喜欢使用哪种数据结构: HashMap还是TreeMap?

答:TreeMap是基于红黑树实现的科导航Map。它使用红黑树算法来排序TreeMap的对象键。我们根据我们的需求来选择。TreeMap是排序过的而HashMap更快。因此,如果我们的元素是有序的,我们用TreeMap,否则就使用HashMap。


本文来自祝坤荣(时序)的微信公众号「麦芽面包」,公众号id「darkjune_think」
开发者/科幻爱好者/硬核主机玩家/业余翻译
转载请注明。

微博:祝坤荣
B站: https://space.bilibili.com/23...

交流Email: mailto:zhukunrong@yeah.net

点赞
收藏
评论区
推荐文章
blmius blmius
4年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
7个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Peter20 Peter20
4年前
mysql中like用法
like的通配符有两种%(百分号):代表零个、一个或者多个字符。\(下划线):代表一个数字或者字符。1\.name以"李"开头wherenamelike'李%'2\.name中包含"云",“云”可以在任何位置wherenamelike'%云%'3\.第二个和第三个字符是0的值wheresalarylike'\00%'4\
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
PHP创建多级树型结构
<!lang:php<?php$areaarray(array('id'1,'pid'0,'name''中国'),array('id'5,'pid'0,'name''美国'),array('id'2,'pid'1,'name''吉林'),array('id'4,'pid'2,'n
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Python进阶者 Python进阶者
1年前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
压力测
压力测
Lv1
是谁,在寒冷的冬天,掀开被单,冰冻爱情的温暖。
文章
5
粉丝
0
获赞
0