HashMap和HashTable的区别和不同.doc

HashMap和HashTable的区别和不同.doc

ID:49164503

大小:43.00 KB

页数:6页

时间:2020-02-29

HashMap和HashTable的区别和不同.doc_第1页
HashMap和HashTable的区别和不同.doc_第2页
HashMap和HashTable的区别和不同.doc_第3页
HashMap和HashTable的区别和不同.doc_第4页
HashMap和HashTable的区别和不同.doc_第5页
资源描述:

《HashMap和HashTable的区别和不同.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、HashMap和HashTable的区别和不同记得刚毕业那会准备面试,看过不少面试题,里面有个说出HashMap和HashTable不同的题目,我那会面试的时候也遇到不少次这个问题,还隐约记得当时的回答是这样的: HashTable是比较旧的版本;HashTable是线程安全的,而HashMap是非线记得刚毕业那会准备面试,看过不少面试题,里面有个说出HashMap和HashTable不同的题目,我那会面试的时候也遇到不少次这个问题,还隐约记得当时的回答是这样的:HashTable是比较旧的版本;HashTa

2、ble是线程安全的,而HashMap是非线程安全的;HashMap的key和value允许Null值,还有就是HashMap效率要高。好像就这些了吧,当时认识也比较肤浅。前段时间有空就想起来了这个问题,于是就想深入的理解一下这两个比较常用的数据结构,然后看了一下这两个类的源码,有了比以前更深入的了解。大体上这两个类内部处理差别不是很大,当然还是有不少不同,下面我们来一一探讨一下他们之间的不同引言:首先来说一下HashMap内部其实是一个数组+链表的结构,当你put一个元素的时候,HashMap会根据Key的h

3、ash值算出要存放的数组的位置,如果两个元素算出的数组值相同的话,那么他们会放在数组里的同一个位置,这个时候在获取该元素的时候,那么会根据Key的hash找到数组的位置,然后再从链表中找到该元素。那么我们可以很容易的想象到,如果每一个数组里只有一个元素的时候,效率是最高的,因为不需要再对链表进行操作。有了这点认识我们就可以进行接下来的分析了。[list][1]数组大小。既然说了内部是数组+链表,那就设计到数组的大小,这一点,HashMap和HashTable是不同的HashMap的默认大小Java代码 sta

4、tic  final  int DEFAULT_INITIAL_CAPACITY= 16;  staticfinalintDEFAULT_INITIAL_CAPACITY=16;我们看到默认是16,而且HashMap的大小一定是2的幂数。这里你可能会问了,如果初始化HashMap的时候指定了一个不是2的幂数的长度呢?如果是这种情况,它也会找到一个最接近你指定值的一个2的幂数,下面是源码:Java代码 int capacity= 1;         while (capacity

5、y)              capacity<<=1;  intcapacity=1;       while(capacity

6、M_CAPACITY=1<<30;如果你指定超过这个大小,它会抛弃你指定的值而采用这个默认值Java代码 if (initialCapacity>MAXIMUM_CAPACITY)            initialCapacity=MAXIMUM_CAPACITY;   if(initialCapacity>MAXIMUM_CAPACITY)           initialCapacity=MAXIMUM_CAPACITY;HashTable的默认大小Java代码 public Hashtable()

7、{     this(11, 0.75f);     }  publicHashtable(){ this(11,0.75f);   }默认是11,HashTable跟HashMap不同如果你指定了长度,它不会对你的指定值进行处理。HashTable的最大值,我没看有看到HashTable中有指定最大值的行为[2]长度扩容上面我们讲了两个类的初始大小,这里需要说明的事,在实际中真正利用的长度并不是这个值,而是有个加载因子,默认是0.75,比如长度是16,而真正使用的是16*0.75,当超过这个数,就会扩容Ha

8、shMap扩容HashMap扩容会把之前长度*2,因为之前的长度肯定是2的幂数,所以自动扩容后也是2的幂数HashTable扩容HashTable扩容是把之前长度*2+1扩容操作是比较消耗资源的,所以这里我们告诉我们在初始化HashMap和HashTable的时候要考虑到实际使用时的长度,应该尽可能的避免出现扩容的操作,从而提高效率[3]put操作HashMap的putJava代码 public V

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。