JavaSE Day13 泛型集合
2021-02-12 本文已影响0人
望穿秋水小作坊
1. 什么是泛型?(很经典的总结,重要)
- 将类型变成参数,提高代码的复用率
2. 有泛型类型 Box<T>,那么 Box<Integer> 是 Box<Number> 的子类吗?
- 不是,同是 Box 类型,不存在子类关系
image.png
3. List、Set、Map 的特点?(先记录一下,后面慢慢理解)
image.png
4. Java 中普通数组的局限性?(至少说 2 点)
image.png
5. Java 中遍历数组的方式?(至少说 3 种)
image.png
6. 为什么很多集合可以调用 for-each ?为什么很多集合可以调用 Iterator 迭代器?
- 因为
for-each的本质就是 调用Iterator迭代器 - 而几乎所有集合都实现了
Iterable接口
image.png
image.png
7. 如何自定义一个迭代器?(以后用到再回来看)
image.png
- 调用代码
image.png
8. ArrayList 的动态扩容原理?(从内存结构图来讲,重要)
image.png
9. 一个细节:当我们判断一个数字 x 是否为偶数时,我们通常会使用 x % 2 == 0 来判断,这种方式可以优化吗?
- 可以优化:使用
x & 1 == 0这种位运算,效率会更高
10. 在 Java 中,如果我们在遍历元素的时候,要删除或者添加元素,用哪个方式比较好?
image.png
11. 如果在迭代器中调用 list.remove 方法,就是使用集合自带的方法修改集合长度,可能会抛出 java.util.ConcurrentModificationException 异常,迭代器是如何判断集合被并发修改的?
- 集合内部维护了一个
modCounter的成员变量,每当 add 或者 remove 时,会调用modCounter++。 - 所以迭代器是依靠
modCounter是否发生改变,从而抛出异常的