Hashtable与Hashmap按理说是一样的,但是为什么使用后者的效率要明显高于前者?
有谁知道吗??
谢谢!

解决方案 »

  1.   

    HashTable 是线程安全的,HashMap则不是线程安全的,在多线程的环境了,如果自己不想控制线程间的同步和互斥的话可以用Hashtable,否则其他情况下最好用Hashmap,因为Hashmap没有考虑线程间的同步于互斥,所以效率较Hashtable要高
      

  2.   

    引用一下网上的话:
    “ 
    1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。3.HashTable有一个contains(Object value),功能和containsValue(Object value)功能一样。4.HashTable使用Enumeration,HashMap使用Iterator。以上只是表面的不同,它们的实现也有很大的不同。5.HashTable中hash数组默认大小是11,增加的方式是 old*2+1。HashMap中hash数组的默认大小是16,而且一定是2的指数。6.哈希值的使用不同,HashTable直接使用对象的hashCode,代码是这样的:
    int hash = key.hashCode();
    int index = (hash & 0x7FFFFFFF) % tab.length;
    而HashMap重新计算hash值,而且用与代替求模:
    int hash = hash(k);
    int i = indexFor(hash, table.length);static int hash(Object x) {
      int h = x.hashCode 
    }
      

  3.   

    两线程:A,B,数据a= 16
     A                B
     读a = 16
                       读a = 16 a= a -1
    写回:15            
                       a = a -1
                       写回15
    B应该写回14才对,上面的例子相当于 16- 2 = 15 。这设计到对临界资源的访问问题
    这就不安全了。不知道是不是这样!现在在学操作系统
                     
      

  4.   

    面试题,哈哈HashTable HashMap前者线程安全,即效率相对低些后面非线程安全,即效率相对高些前者不可以有null值后者可以有null值
      

  5.   

    ................
    我面试的时候就有这道题!还有arraylist呢!
      

  6.   

    TO escalj(天行健,君子以自强不息) HashMap重新计算hash值,而且用与代替求模:
    int hash = hash(k);
    int i = indexFor(hash, table.length);static int hash(Object x) {
      int h = x.hashCode 
    }
    和hashtable相比,这样做有什么好处???
      

  7.   

    escalj(天行健,君子以自强不息)已经说的全面了,如果还不明白可以多查查书1
      

  8.   

    记得ArrayList线程不安全,Vector线程安全我所理解的线程安全或者不安全,指的是多线程环境下使用一个实例,会不会因为一个线程中改变了实例状态,而对另一个正使用该实例的线程的工作造成影响。