标签搜索

java面试题01

ATAO
2022-07-21 / 0 评论 / 19 阅读 / 正在检测是否收录...

1.ArrayList和LinkedList的区别

  1. 底层数据结构不同

ArrayList是基于数组的

LinkedList是基于双向链表的

  1. 效率不同

数组元素在内存中是连续存放的,所以ArrayList查询效率高,插入删除效率低

链表元素在内存中存放的特点是不连续的,所以LinkedList插入删除效率高,查询效率低

2.HashMap和HashTable的区别

相同点:

  • HashMap和HashTable都实现了Map、Cloneable(可克隆)、Serializable(可序列化)三个接口

不同点:

  • 底层数据结构不同,jdk1.7底层都是数组+链表,jdk1.8 HashMap加入了红黑树
  • Hashtable不允许键值为null,HashMap允许键值为null
  • Hashtable继承的是Dictionary类,而HashMap继承的是AbstractMap类
  • 同步性不同,Hashtable是同步的(synchronized),HashMap不是同步的,因此Hashtable是线程安全的,HashMap是线程不安全的
  • 添加键值对时采用的hash值算法不同,HashMap采用自定义的hash算法,Hashtable直接采用hashCode()
  • 初始容量不同,HashMap初始容量为16,Hashtable初始容量为11,两者的负载因子都是0.75
  • 扩容机制不同,当已用容量>总容量*负载因子时,HashMap扩容规则为当前容量翻倍,Hashtable扩容规则为当前容量翻倍+1
  • 支持遍历种类不同
  • 迭代器不同
  • 部分API不同

3.sleep和wait的区别

  1. sleep()是线程类Thread的静态方法,wait是属于Object的成员方法
  2. sleep只释放CPU没有释放锁,wait释放了锁
  3. wait只能通过notify或notifyAll来唤醒
  4. sleep可以在任何地方使用,wait只能在同步控制方法或同步控制块中使用

4.接口和抽象类的区别

  1. 构造方法:抽象类有构造方法,用于子类实例化使用。接口没有构造方法。
  2. 成员变量:抽象类的成员变量可以是变量也可以是常量。接口的成员变量只能是常量,默认修饰符public static final
  3. 成员方法:抽象类的成员方法可以是抽象的也可以是非抽象的,接口在1.7中方法只能是抽象的,1.8后可以写default和static方法

5.final、finalize和finally的区别

final修饰变量,变量在初始化以后不能被修改
final修饰方法,方法不能被子类重写
final修饰类,类不能被继承

finalize方法:当一个对象是不可达对象的时候,GC会在某一个不确定的时候回收该对象,
在回收该对象之前,JVM会调用该对象finalize方法以释放该对象占用的其他资源,不建议
使用finalize方法,因为finalize的执行时机是不确定的

finally用在try-catch或try块之后,无论try或catch中是否有异常,其中的代码一定会执行。
如果try或catch中有return语句,则finally会先执行然后再return

0

评论 (0)

取消