Java后端开发 — 集合常见面试题

1. HashMap(京东面试真题)

(1)初始容量为什么是2的n次幂及为什么是2倍扩容?
HashMap计算添加元素的位置时,使用的位运算是特别高效的运算
HashMap的初始容量是2的n次幂,是因为容量是2的n次幂,可以使得添加的元素均匀分布在HashMap中的数组上,减少hash碰撞,避免形成链表的结构,使得查询效率降低
HashMap以2倍扩容,目的是减少hash碰撞,使元素分配均匀

(2)如何解决HashMap线程不安全的问题?
在Java中有HashTable、SynchronizedMap、ConcurrentHashMap这三种是实现线程安全的Map:
1)HashTable:是直接在操作方法上加synchronized关键字,锁住整个数组,粒度比较大
2)SynchronizedMap:是使用Collections集合工具的内部类,通过传入Map封装出一个SynchronizedMap对象,内部定义了一个对象锁,方法内通过对象锁实现
hashmap通过 Collections.synchronizedMap() 获取一个线程安全的hashmap
3)ConcurrentHashMap:使用分段锁(CAS + Synchronized相结合),降低了锁粒度,大大提高并发度

2. Java迭代器

迭代器属于设计模式之一,迭代器模式提供了一种方法来顺序访问一个聚合对象中各个元素,而不保留该对象的内部表示。
(1)Iterator对象称为迭代器,主要用于遍历Collection集合中的元素;
(2)所有实现了Collection接口的集合类都有一个iterator()方法,用以返回一个实现了Iterator接口的对象,即可以返回一个迭代器;
(3)Iterator仅用于遍历集合,Iterator本身并不存放对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Kevin&Amy

感谢您的鼓励!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值