目录
🍣1. Iterator 和 ListIterator 有什么区别?
🍣2. Iterator 和 Enumeration 接口的区别?
🍣3. fail-fast 与 fail-safe 有什么区别?
🍣4. Collection 和 Collections 有什么区别?
💴哈喽,大家好丫,你们的小郭子又来啦 ~
今天我们继续聊一聊java面试中的【集合问题(3)】,
话不多说,直接上干货,嘻嘻嘻 ~
🍣1. Iterator 和 ListIterator 有什么区别?
Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向。
ListIterator 实现了 Iterator 接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引等等。
🍣2. Iterator 和 Enumeration 接口的区别?
- Iterator 的方法名比 Enumeration 更科学;
- Iterator 有 fail-fast 机制,比 Enumeration 更安全;
- 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次,但是消耗了一倍的内存空间,所以我们认为,转换回链表是有必要的。
- 维护一颗红黑树比维护一个链表要复杂,红黑树有一些左旋右旋等操作来维护顺序,而链表只有一个插入操作,不考虑顺序,所以链表的内存开销和耗时在数据少的情况下是更优的选择。
💴好啦,今天的分享到这里就结束啦 ~
💴觉得我分享的文章不错的话,可以关注一下哦,嘻嘻嘻
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/73255.html