Java集合6——HashMap和HashTable的区别

HashMap与HashTable的不同

HashTable简介

和HashMap一样,Hashtable 也是一个散列表,它存储的内容是键值对(key-value)映射
Hashtable 继承于Dictionary,实现了Map、Cloneable、java.io.Serializable接口。
Hashtable 的函数都是同步的,这意味着它是线程安全的。它的key、value都不可以为null。此外,Hashtable中的映射不是有序的。

  1. 首先来观察这两个类的定义

  HashTable

   public class Hashtable  

    extends Dictionary  

    implements Map, Cloneable, java.io.Serializable {  

  HashMap

   public class HashMap  

    extends AbstractMap  

    implements Map, Cloneable, Serializable    

HashTable继承于Dictionary,而HashMap继承于AbstractMap

  1. 观察其put方法

HashMap

Java集合6——HashMap和HashTable的区别_第1张图片

 

这是HashMap的put()方法,这里允许key为null。如果key值重复将覆盖其value值,并且先对key值进行两次Hash

Java集合6——HashMap和HashTable的区别_第2张图片

Java集合6——HashMap和HashTable的区别_第3张图片

如果超过默认容量,将用这种方法扩容。2*table.length

 

HashTable

Java集合6——HashMap和HashTable的区别_第4张图片

*** 线程安全的

*** key值和value值不能为null,会报异常

*** 直接调用了Hashcode()方法

 

Java集合6——HashMap和HashTable的区别_第5张图片

如果超过默认容量将调用rehash()方法,

Java集合6——HashMap和HashTable的区别_第6张图片

扩容为二倍加一

  1. 观察其默认值

HashTable

 

可知HashTable的默认大小为11

HashMap

可知HashMap的默认容量为16

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Java基础)