1.ArrayList和LinkedList的区别
- 底层数据结构不同
ArrayList是基于数组的
LinkedList是基于双向链表的
- 效率不同
数组元素在内存中是连续存放的,所以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的区别
- sleep()是线程类Thread的静态方法,wait是属于Object的成员方法
- sleep只释放CPU没有释放锁,wait释放了锁
- wait只能通过notify或notifyAll来唤醒
- sleep可以在任何地方使用,wait只能在同步控制方法或同步控制块中使用
4.接口和抽象类的区别
- 构造方法:抽象类有构造方法,用于子类实例化使用。接口没有构造方法。
- 成员变量:抽象类的成员变量可以是变量也可以是常量。接口的成员变量只能是常量,默认修饰符public static final
- 成员方法:抽象类的成员方法可以是抽象的也可以是非抽象的,接口在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)