java中的Map、HashMap、HashTable

来源:互联网 发布:淘宝网自行车外胎 编辑:程序博客网 时间:2024/04/29 14:03

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
原创粉丝点击