免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1638 | 回复: 0
打印 上一主题 下一主题

HashMap与Hashtable的区别 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-14 03:42 |只看该作者 |倒序浏览
HashTable的运用非常广泛, HashMap是新框架中用来代替HashTable的类, 也就是说建议运用HashMap, 不要运用HashTable。 可能你觉得HashTable很好用, 为什么不用呢?这里简单分析他们的区别。  
  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();
  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的操作文章由 suyin.tk 淘宝缩阴产品排行榜 整理,收集辛苦,希望能保留出处。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP