![](https://csdnimg.cn/release/download_crawler_static/12012469/bgb.jpg)
传智播客——IT 就业培训专家 http://www.itcast.cn
25、 HashMap 和 Hashtable 的区别
1) 同步或线程安全:这是两者最重要的区别。HashMap 的是不同步的,不是线程安全的,另一
方面,Hashtable 是线程安全的,同步的。
2) 何时使用 HashMap:答案是,如果您的应用程序不需要任何多线程任务,换句话说 HashMap
的是对于非线程安全应用程序的更好的选择。哈希表应当在多线程应用中使用。
3) null 键和空值:HashMap 是允许空键空值的,而 Hashtable 是不允许空键空值的。
4) 迭代器类型:HashTable 使用 Enumeration,HashMap 使用 Iterator。
5) 性能:HashMap 因为是线程不安全的,效率要比 Hashtable 高。
6) Hashtable 是 Dictionary 类现在是在 JDK 1.7 过时的子类,因此,它已不再使用。
7) Hashtable 继承自 Dictionary 类,而 HashMap 是 Java1.2 引进的 Map 接口的一个实现类
8) HashMap 允许将 null 作为一个 entry 的 key 或者 value,而 Hashtable 不允许
9) HashMap 把 Hashtable 的 contains 方法去掉了,改成 containsvalue 和 containsKey。因
为 contains 方法容易让人引起误解。
10) 最大的不同是,Hashtable 的方法是 Synchronize 的,而 HashMap 不是,在 多个线程访问
Hashtable 时,不需要自己为它的方法实现同步,而 HashMap 就必须为之提供外同步。
26、 java 堆和栈的区别
Java 栈是与每一个线程关联的,JVM 在创建每一个线程的时候,会分配一定的栈空间给线程,
主要存放线程执行过程中的局部变量,方法的返回值,基本类型的变量(,int, short, long, byte, float,
double, boolean, char)以及方法调用的上下文。栈空间随着线程的终止而释放,栈的优势是,存取速
度比堆要快,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活
性。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。
Java 中堆是由所有的线程共享的一块内存区域,堆用来保存各种 JAVA 对象,比如数组,线程
对象等。java 的堆是一个运行时数据区,类的(对象从中分配空间。这些对象通过 new、newarray、
anewarray 和 multianewarray 等 指令建立,它们不需要程序代码来显式的释放。堆是由垃圾回收来负
责的,堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,因为它是在运行时 动
态分配内存的,Java 的垃圾收集器会自动收走这些不再使用的数据。但缺点是,由于要在运行时动
态分配内存,存取速度较慢。
27、 当一个线程进入一个对象的 synchronized 方法后,其他线程是否可进入此对象
的其他方法?为什么?
分情况而定:
1) 其他方法前是否加了 synchronized 关键字,如果没加,则能。
2) 如果这个方法内部调用了 wait,则可以进入其他 synchronized 方法。
3) 如果其他个方法都加了 synchronized 关键字,并且内部没有调用 wait,则能。
4) 如果其他方法是 static,它用的同步锁是当前类的字节码,与非静态的方法不能同步,因
为非静态的方法用的是 this