大厂java面试题——集合篇(3)

目录

💴哈喽,大家好丫,你们的小郭子又来啦 ~

🍣1. Iterator 和 ListIterator 有什么区别?

🍣2. Iterator 和 Enumeration 接口的区别?

🍣3. fail-fast 与 fail-safe 有什么区别?

🍣4. Collection 和 Collections 有什么区别?

🍣5. HashMap的hash算法为什么使用异或?

🍣6.  加载因子可以调整吗?

🍣 7. 为什么HashMap的初始容量是16?

🍣8.为什么树化之后,当长度减至6的时候,还要进行反树化?



💴哈喽,大家好丫,你们的小郭子又来啦 ~

今天我们继续聊一聊java面试中的【集合问题(3)】,

话不多说,直接上干货,嘻嘻嘻 ~

                                

🍣1. Iterator 和 ListIterator 有什么区别?

Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向。

ListIterator 实现了 Iterator 接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等等。

🍣2. Iterator 和 Enumeration 接口的区别?

  1. Iterator 的方法名比 Enumeration 更科学
  2. Iterator 有 fail-fast 机制,比 Enumeration 更安全
  3. Iterator 能够删除元素,Enumeration 并不能删除元素。

🍣3. fail-fast 与 fail-safe 有什么区别?

Iterator 的 fail-fast 属性与当前的集合共同起作用,因此它不会受到集合中任何改动的影响。Java.util 包中的所有集合类都被设计为 fail-fast 的,而 java.util.concurrent 中的集合类都为 fail-safe 的。

当检测到正在遍历的集合的结构被改变时,fail-fast 迭代器抛出ConcurrentModificationException,而 fail-safe 迭代器从不抛出 ConcurrentModificationException。

🍣4. Collection 和 Collections 有什么区别?

Collection:是最基本的集合接口,一个 Collection 代表一组 Object,即 Collection 的元素。它的直接继承接口有 List,Set 和 Queue。

Collections:是不属于 Java 的集合框架的,它是集合类的一个工具类/帮助类。此类不能被实例化, 服务于 Java 的 Collection 框架。它包含有关集合操作的静态多态方法,实现对各种集合的搜索、排序、线程安全等操作。

🍣5. HashMap的hash算法为什么使用异或?

异或运算能更好的保留各部分的特征,如果采用&运算计算出来的值会向0靠拢,采用 | 运算计算出来的值会向1靠拢。

🍣6.  加载因子可以调整吗?

可以调整,hashmap运行用户输入一个加载因子

🍣 7. 为什么HashMap的初始容量是16?

我们知道扩容是个耗时的过程,有大量链表操作,16作为一个折中的值,即不会存入极少的内容就扩容,也不会在加入大量数据而扩容太多次。16扩容3次就达到128的长度。

其实还有一个很重要的地方,16是2的4次方,我们在看HashMap的源码时,可以看到初始容量的定义方式如下:

static final int DEFAULT_INITIAL_CAPACITY = 1 << 4;

🍣8.为什么树化之后,当长度减至6的时候,还要进行反树化?

  • 长度为6时我们查询次数是6,而红黑树是3次,但是消耗了一倍的内存空间,所以我们认为,转换回链表是有必要的。
  • 维护一颗红黑树比维护一个链表要复杂,红黑树有一些左旋右旋等操作来维护顺序,而链表只有一个插入操作,不考虑顺序,所以链表的内存开销和耗时在数据少的情况下是更优的选择。

💴好啦,今天的分享到这里就结束啦 ~

💴觉得我分享的文章不错的话,可以关注一下哦,嘻嘻嘻

                        

                                

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值