java 集合的面试题_40个Java集合面试问题和答案(上)

Java集合框架为Java编程语言的基础,也是Java面试中很重要的一个知识点。这里,我列出了一些关于Java集合的重要问题和答案。

1.Java集合框架是什么?说出一些集合框架的优点?

2e61df39742dd33aa53343b6cd84239b.png

2.集合框架中的泛型有什么优点?

bb01f32974e7e9074426a745df796a98.png

3.Java集合框架的基础接口有哪些?

1dc573e0dc55b84282e0c1da4294cc8b.png

4.为何Collection不从Cloneable和Serializable接口继承?

5fdc54e5a050a5ea6920eb0c7dbacf81.png

5.为何Map接口不继承Collection接口?

eb42656ada7ff8767abb5ce95e15f1fa.png

d33b7dcd95e285f7526e22cf60132c6e.png

6.Iterator是什么?

4926992cea89ac879ca61c1425bb6ee9.png

7.Enumeration和Iterator接口的区别?

d7e6d8f5bbb3945bf85e0771ed0cbc13.png

8.为何没有像Iterator.add()这样的方法,向集合中添加元素?

bc5d28d921ed48671d83e31ce1b2b46c.png

9.为何迭代器没有一个方法可以直接获取下一个元素,而不需要移动游标?

2df006c68216542de47bec721f21b3ba.png

10.Iterater和ListIterator之间有什么区别?

f7d832d8d51a581359336c76ce965780.png

11.遍历一个List有哪些不同的方式?

a184dec970070cedc9fc33f297ef6f4c.png

使用迭代器更加线程安全,因为它可以确保,在当前遍历的集合元素被更改的时候,它会抛出ConcurrentModificationException。

12.通过迭代器fail-fast属性,你明白了什么?

6f01f9bbcca40cc6552fa0c1445da549.png

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

d946cc614dc38fd2e91988d174b15460.png

14.在迭代一个集合的时候,如何避免ConcurrentModificationException?

62a25558e8db90ed4b4203dc4f70a38d.png

15.为何Iterator接口没有具体的实现?

a40ca3dbe1b98738059560c5a1d371d4.png

16.UnsupportedOperationException是什么?

9cb97b58166b6b6840feace1f987db06.png

17.在Java中,HashMap是如何工作的?

12bc7125bbdc48402233b8b9d7a54f16.png

18.hashCode()和equals()方法有何重要性?

5eeace8acae64ce9c44ddc4d4f9f71cf.png

19.我们能否使用任何类作为Map的key?

我们可以使用任何类作为Map的key,然而在使用它们之前,需要考虑以下几点:

(1)如果类重写了equals()方法,它也应该重写hashCode()方法。

(2)类的所有实例需要遵循与equals()和hashCode()相关的规则。请参考之前提到的这些规则。

(3)如果一个类没有使用equals(),你不应该在hashCode()中使用它。

(4)用户自定义key类的最佳实践是使之为不可变的,这样,hashCode()值可以被缓存起来,拥有更好的性能。不可变的类也可以确保hashCode()和equals()在未来不会改变,这样就会解决与可变相关的问题了。

比如,我有一个类MyKey,在HashMap中使用它。

ea806d2847cfdf09104f6fcbda9b57fa.png

那就是为何String和Integer被作为HashMap的key大量使用。

20.Map接口提供了哪些不同的集合视图?

Map接口提供三个集合视图:

(1)Set keyset():返回map中包含的所有key的一个Set视图。集合是受map支持的,map的变化会在集合中反映出来,反之亦然。当一个迭代器正在遍历一个集合时,若map被修改了(除迭代器自身的移除操作以外),迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除,从map中移除对应的映射。它不支持add和addAll操作。

(2)Collection values():返回一个map中包含的所有value的一个Collection视图。这个collection受map支持的,map的变化会在collection中反映出来,反之亦然。当一个迭代器正在遍历一个collection时,若map被修改了(除迭代器自身的移除操作以外),迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除,从map中移除对应的映射。它不支持add和addAll操作。

(3)Set> entrySet():返回一个map钟包含的所有映射的一个集合视图。这个集合受map支持的,map的变化会在collection中反映出来,反之亦然。当一个迭代器正在遍历一个集合时,若map被修改了(除迭代器自身的移除操作,以及对迭代器返回的entry进行setValue外),迭代器的结果会变为未定义。集合支持通过Iterator的Remove、Set.remove、removeAll、retainAll和clear操作进行元素移除,从map中移除对应的映射。它不支持add和addAll操作。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值