JavaSE核心技术(续)

Java基础与OOP模块

7. 什么是自动拆装箱?Integer 的缓存机制(-128~127)了解吗?

自动装箱:

​ 基本类型 → 包装类,编译器自动调用 valueOf()将基本类型包装成对象

自动拆箱:

​ 包装类 → 基本类型,编译器自动调用 xxxValue()将对象里的东西拿出来

Integer.valueOf() 取值时:-128~127复用缓存对象;超出范围新建对象;new Integer永远新建,不走缓存。

8. final、finally、finalize 三者有什么区别?

final(关键字)
final类:不能被继承
final方法:不能重写,可以重载
final变量:只能赋值一次,引用不可变

finally(关键字,异常的时候用)
try-catch-finally fianlly里的一定会执行

finalize() Object里的方法,已废弃了

9. Java 是值传递还是引用传递?方法参数传递的本质是什么?

Java是值传递

基本数据类型: 传的是数值的拷贝。方法里改形参,不影响外面原变量。
引用类型: 传的是对象地址的拷贝。传参是把地址复制一份给形参。

本质:所有传参,都是复制一份实参的值(要么是数据、要么是地址)给方法的形参。

10. 什么是浅拷贝和深拷贝?如何实现深拷贝?

  • 浅拷贝:

    新对象是新的;但引用类型的,只复制地址,共用同一个子对象。
    改新对象里子对象的数据 → 原对象的子对象也跟着变。

    Object.clone() 默认就是浅拷贝!

  • 深拷贝

    从头到尾全部新建:新对象 + 它所有引用的子对象、子子对象……全是新的。
    新旧对象互不影响。

    实现深拷贝3种方式:
    1. 重写 clone()
    2. 对象序列化→反序列化生成新对象
    3. 手动new每一个子对象,逐字段赋值

11 Java 集合框架的基本接口有哪些?

集合分为两大根接口:Collection 和 Map。

Collection: 存储单个对象,包含三个子接口:

  • List:有序、可重复,带有索引;
  • Set:无序、不可重复;
  • Queue:队列,先进先出。

Map: 存储 key-value 键值对,key 不允许重复

​ 实现类:HashMap、TreeMap

12 ArrayList 和 LinkedList 的区别及适用场景?

底层:ArrayList 底层是动态数组;LinkedList 底层双向链表。

特性:

  • ArrayList 根据索引查询速度快;在数组中间位置增删元素需要移动大量元素,速度慢。

  • LinkedList 查询需要从头遍历,查询慢;在首尾位置增删只修改节点指针,速度快。

适用场景:

​ ArrayList 适合大量查询、少量增删;

​ LinkedList 适合大量首尾增删、查询较少。

总结:数组查快中间增删慢;链表首尾增删快,随机查询慢。

13 HashMap 的底层原理是什么?JDK 8 为什么引入红黑树?

DK8 HashMap 底层是数组 + 链表 + 红黑树。
put 流程:

根据 key 算出 hash 值,定位数组下标。如果下标位置为空,直接存放;如果已有元素,发生哈希冲突。key 相同就覆盖 value;key 不同挂载到链表上。链表长度 >=8 并且数组长度 >=64 时,链表转为红黑树;红黑树节点减少到 6,退化为链表。

引入红黑树原因:冲突严重时链表过长,遍历查询时间复杂度 O (n)。红黑树增删查是 O (logn),提升大数据量下查询性能。

作者:bingbing-blog

出处:http://www.cnblogs.com/bingbing-blog/

本文版权归作者和博客园共有,转载必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。

posted @ 2026-10-11 17:58  冰冰的blog  阅读(1)  评论(0)    收藏  举报