java中的Map、HashMap、HashTable

JavaMap、HashMap和TableMap的区别与联系

 

1.Map是一个接口

    java.util.Map

     public interface Map<K,V>

 是一种键-值对的数据结构

2.HashMap是一个Map的实现类

    java.util.HashMap<K,V>

     public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>,                                    CloneableSerializable

 

HashMap的数据结构

HashMap是哈希表的一种实现类,它是以数组为链表头一个二维链表,如图



 解决冲突的方式,就是在相同的地址上延伸链表,HashMap是非同步的,也就是说在单线程使用时用它,当然了,也可以采用一定的方式使它同步,另外HashMap的键和值都允许为空,但是null键最多只能有一个。当用get()判断某个键是否存在的时候有可能该键存在但值为null,也可能是不存在该键,返回值为null,所以当用HashMap是不能用get()的返回值来判断该键是否存在,应该用containKeys(key)来判断,如下图。HashMap不包含contains()方法,它的哈希值每次都是重新计算的,链表头组数的默认大小是16,而且一定是2的指数。

 

3.HashTable也实现了Map接口,但是继承的类与HashMap不同

HashTableHashMap很相似,但是它线程是同步的,键不能为空(会报空指针异常),HashTable直接使用对象的hashCodeHashTablehash数组默认大小是11,增加的方式是 old*2+1,含有contains()方法,与containsValue()等效

 

参考:http://www.cnblogs.com/devinzhang/archive/2012/01/13/2321481.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值