1、HashMap和Hashtable的区别。 HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,效率上可能高于Hashtable。1 k3 x: D* }' F/ k: p) t
9 }" z- W# E+ q) n t HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。
% Y2 L8 P8 b% ]! l& E HashMap 把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误 解。 Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。
* S2 p' p( C# J- }, O: k( | 最大的不同是,Hashtable的方法是Synchronize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。
1 s$ k) c: b W: Z* ] Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。
, n3 ~7 }) W) ~) D2 R( g 2、final, finally, finalize的区别。
1 z$ S3 t, D: `& S% l) P3 Y final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承。finally是异常处理语句结构的一部分,表示总是执行。finalize是 Object类的一个方法,在垃圾收集器执行的时候会调用被回收对象的此法,可以覆盖此方法提供垃圾收集时的其他资源回收,例如关闭文件等。 0 U# q! \ v$ P5 W$ m
3、sleep() 和 wait() 有什么区别? " \3 g3 A+ f: K2 u
sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用 sleep不会释放对象锁。wait是Object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待此对象的等待锁定池,只有针对此对 象发出notify方法(或notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。 ! |5 [ P+ `1 R P- v& K
4、Overload和Override的区别。 & [) v" j, B/ R
Overloaded的方法是否可以改变返回值的类型? 7 r) W2 p+ K; d/ H. m- k
方法的重写Overriding 和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一 个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。如果在一个类中定义了多个同名的方 法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。 |