• 20个Java集合面试问题和答案


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

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

    e6f0fb9c2d44ca5b299ccee8c8d1245f.png

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

    4c94d3162569c0e6a5dc0f5c3081fd20.png

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

    8ee61abc6a2b991125afd63859b3e437.png

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

    27aab6a39d92f9e728f0ace7a0736ac4.png

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

    d904ec9682595d6609d03e6619594b02.png

    e3470332304ff210fb817c6546ed0815.png

    6.Iterator是什么?

    e0c98c4a2e925cb4d5faae3b36721bd2.png

    7.Enumeration和Iterator接口的区别?

    42193132d2d454e6cc941feb9d529707.png

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

    7451ebdb2c9a674a2088578ea80095e5.png

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

    77606f2e89b264f9a71508072603ce4f.png

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

    5ad0e95aa363bc1e738efe1a676fc7dd.png

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

    3b79e1848da484c1598fe738f9f2b5e1.png

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

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

    a3b059d43898c1950cb54943a1828635.png

    2e6e76a6712fee54126e0b6c68d3c04f.png

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

    88cda5ffd2355bdb8023444899089b3d.png

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

    3b0c5339cabc5ebabb4097b4ebf44ab6.png

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

    bf35f9de13f03affafa1bb018afef7be.png

    16.UnsupportedOperationException是什么?

    bdf1d8cea1d538ca9ac093d5df21ffba.png

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

    0fb24f2438d51de19a538d1e2e229311.png

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

    b3c4c28475dcd9a3c0f4d7ba32bb963b.png

    f14f8ba1129d785f04c1544c1a95c296.png

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

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

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

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

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

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

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

    a2f52a50c0c3e858b26aeca1e11b3137.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操作。

    学习Java的同学注意了!!!

    学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群346942462,我们一起学Java!

    先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦

  • 相关阅读:
    vue路由-两个树形结构数据-递归处理方法
    python集合的应用场景
    项目经理之项目经理必备素质能力
    Guava Cache 原理分析与最佳实践
    vue-cli项目因为webpack版本不兼容运行后报错
    面试:Spring中单例模式用的是哪种?
    指定列求和或计数,不会受选择鼠标选择区域影响
    文件包含 [ZJCTF 2019]NiZhuanSiWei1
    pytest 结合logging输出日志保存至文件
    深入理解Android音视频同步机制(一)ExoPlayer的avsync逻辑
  • 原文地址:https://blog.csdn.net/Ajekseg/article/details/126097598