|
1 | 1 | ## HashMap和Hashtable的区别
|
2 | 2 | ### 问题
|
3 | 3 | 在Java中`HashMap`和`Hashtable`的区别?
|
4 | | -哪一个对于非线程应用程序更有效? |
| 4 | +哪一个对于多线程应用程序更好? |
5 | 5 |
|
6 | 6 | ### 回答
|
7 | | -1. `Hashtable`是同步的,而`HashMap`不是。这让`HashMap`对于非线程应用程序来说更加好一点,对于非同步对象通常表现得比同步的要好。 |
8 | | -2. `Hashtable`不允许有空的键或值。`HashMap`允许空的键和任何数值的空值。 |
9 | | -3. HashMap的一个子类是[LinkedHashMap](http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html),如果你想预知迭代的顺序(插入的时候就自动排序了),你能轻易的从`LinkedHashMap`转化成`HashMap`。对于`Hashtable`就不那么容易。 |
10 | | -如果同步对于你不是那么重要的话,我会建议用`HashMap`.如果同步很重要的话,你可以看看[ConcurrentHashMap](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html) |
| 7 | +1. `Hashtable`是同步的,加了`synchronized`锁,而`HashMap`不是。没有加`synchronized`锁的对象,性能通常比加了`synchronized`锁的对象要更好一些,因此,如果是非多线程程序,不需要考虑锁、同步等问题,那么使用`HashMap`更好。 |
| 8 | +2. `Hashtable`不允许有空的键或值。`HashMap`允许空键和空值。 |
| 9 | +3. HashMap有一个子类[LinkedHashMap](http://docs.oracle.com/javase/7/docs/api/java/util/LinkedHashMap.html),对这个类对象进行迭代时,它的顺序是有序的(按插入顺序排序)。如有需要,你也能轻易的从`LinkedHashMap`转化成`HashMap`。`Hashtable`就没那么简单了, |
| 10 | + |
| 11 | +总之,如果你无需关心同步(synchronized)问题,我会建议用`HashMap`。反之,你可以参考[ConcurrentHashMap](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentHashMap.html) |
11 | 12 |
|
12 | 13 | ### stackoverflow链接:
|
13 | 14 | http://stackoverflow.com/questions/40471/differences-between-hashmap-and-hashtable
|
|
0 commit comments