hastTable和hashMap的区别:
(1)Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现。
(2)这个不同即是最重要的一点:Hashtable中的方法是同步的,而HashMap方法(在缺省情况下)是非同步的。即是说,在多线程应用程序中,不用专门的操作就安全地可以使用Hashtable了;而对于HashMap,则需要额外的同步机制。但HashMap的同步问题可通过Collections的一个静态方法得到解决:
Map Collections.synchronizedMap(Map m)
这个方法返回一个同步的Map,这个Map封装了底层的HashMap的所有方法,使得底层的HashMap即使是在多线程的环境中也是安全的。
(3)只有HashMap可以让你将空值作为一个表的条目的key或value。HashMap中只有一条记录可以是一个空的key,但任意数量的条目可以是空的value。这就是说,如果在表中没有发现搜索键,或者如果发现了搜索键,但它是一个空的值,那么get()将返回null。如果有必要,用containKey()方法来区别这两种情况。 其它的一些资料: 1.HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。(最主要的区别)
2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以,只容许有一个null值的key,可以有多个

null值的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();
   h += ~(h << 9);
   h ^= (h >>> 14);
   h += (h << 4);
   h ^= (h >>> 10);
   return h;
}
static int indexFor(int h, int length) {
   return h & (length-1);
}
以上只是一些比较突出的区别,当然他们的实现上还是有很多不同的,比如
HashMap对null的操作。

最新文章

  1. JSON下
  2. Android NDK 同时编译多个Module
  3. SGU 149 Computer Network 树DP/求每个节点最远端长度
  4. photoshop 魔术橡皮擦
  5. 分布式搜索之搭建Solrcloud(Solr集群)
  6. 使用百度云同步盘和Git Extensions进行代码托管
  7. Android Studio安装应用时报错 installation failed with message Failed to finalize session......
  8. Aps.net中基于bootstrapt图片上传插件的应用
  9. null和undefined的异同
  10. ubuntu显卡驱动安装
  11. Saiku Table展示数据合并bug修复(二十五)
  12. 【Shell】单行注释和多行注释
  13. nodemailer + express + h5 拖拽文件上传 实现发送邮件
  14. 执行sql脚本保留操作日志
  15. button中文字垂直居中
  16. Centos7 在 Xshell里 vim的配置
  17. js中的json的小例子
  18. Java 与C++区别:复写(override)
  19. USB with NXP Microcontrollers
  20. UOJ275 组合数问题

热门文章

  1. category和关联对象
  2. SpringCloud学习笔记(14)----Spring Cloud Netflix之Hystrix对Feign的支持
  3. 创建私有CA, 加密解密基础, PKI, SSL
  4. 手把手教你如何新建scrapy爬虫框架的第一个项目(上)
  5. Node_进阶_8
  6. ubuntu下安装宋体simsun
  7. Dubbo分布式服务框架入门(附project)
  8. CF 558D(Guess Your Way Out! II-set解决区间问题)
  9. Could not load the FreeMarker template named &amp;#39;select&amp;#39;
  10. Delphi的时间 x87 fpu control word 精度设置的不够