• 【Java基础】Java基础题


    1. 重载和重写的区别

    1)重载:

    • 发生在同一个类中,要求方法名相同、参数类型不同(个数不同、顺序不同、类型不同)

    • 和方法的返回值和访问修饰符没关系(在只有返回值和访问修饰符不同的这种情况下,编译时会报错)

    2)重写: 子类重写父类的方法

    • 方法名、参数列表都相同
    • 子类的返回值范围小于父类
    • 抛出的异常范围小于父类
    • 访问修饰符的范围大于等于父类
    • 如果父类方法访问修饰符为 private 则子类就不能重写该方法

    2. List 和 Set 的区别
    • List 有序、可重复、允许多个 null 元素对象,可以使用迭代器取出所有元素,再逐一遍历,还可以使用 get(index) 下标的形式获取指定下标的元素,也就是说支持随机访问
    • Set 无序,不可重复,最多容许一个 null 元素对象,取元素时,只可以使用迭代器接口取得所有元素,再逐一遍历各个元素 (很好理解鸭,它无序,所有肯定不能用 get(index) 这种方式取,下标对它来说无意义)

    3. ArrayList 和 LinkedList 的区别
    • 在底层实现上,ArrayList 底层是数组,LinkedList 底层是链表
    • 这样的结构导致了他们的使用场景的区别,ArrayList 更适合随机查找比较多的场景,LinkedList 更适合删除和添加场景比较多的场景
    • ArrayList 和 LinkedList 都实现了 List 接口,但是 LinkedList 还实现了 Deque 接口,也就是说LinkedList 可以当作双端队列的来使用

    4. ConcurrentHashMap 的扩容机制
    • jdk 1.7

    1.7 中的 ConcurrentHashMap 基于 Segment 实现,每个 Segment 相当于一个小型的 HashMap。当需要进行扩容时,Segment 对象内部进行扩容。和 HashMap 扩容机制类似,先生成新数组,然后将元素转移到新数组中,再修改指针指向新的数组。其对扩容阈值的判断,是基于每个 Segment 内部进行判断的

    在这里插入图片描述

    • jdk 1.8

    1.8中的 ConcurrentHashMap 不再基于 Segment 实现,其扩容是可以多线程的。扩容之前也生成一个新数组,然后将需要转移的元素分组,每组交给不同线程转移,每个线程负责一组或多组的转移工作。若是出现扩容时,一线程想 put 的情况,则该线程帮忙一起扩容

    在这里插入图片描述


  • 相关阅读:
    树链剖分基础入门 -- 强大的树上操纵数据结构
    unity3d:GameFramework+xLua+Protobuf+lua-protobuf,与服务器交互收发协议
    11个程序员必备简捷开发辅助工具
    容器相关的概念
    Android自动化测试中使用ADB进行网络状态管理!
    Win10如何找回图片查看器
    shopify商店Google购物广告2022教程
    【单片机入门】(三)应用层软件开发的单片机学习之路-----UART串口通讯和c#交互
    抗洪救灾,共克时艰,城联优品捐赠10万元爱心物资驰援英德
    【Python】深究for循环迭代
  • 原文地址:https://blog.csdn.net/liuwanqing233333/article/details/127931344