哈希表是一种重要的存储方式和快速检索方法。来自于Java.util.Hashtable。对于数组来说,存储的位置和对象本身的内容没有必然联系,所以查找起来只能顺序查找。如果数组中元素太多了,就没办法应付了。
建立一个哈希表需要选取对象的一个关键属性,并依据提前选定的对应关系,是对象和唯一的存储位置向对应。
对于哈希表来说,容量是不固定的,随着数据的加入,其容量也可以自动增长。上述的关键属性被称为关键字,每个对象的关键字必须唯一,即和其他的对象都不相同。选定的对应关系称为哈希方法,而对应到的整形数据则被称为哈希码。
常见的集合类的继承关系如下
Collection<–List<–Vector
Collection<–List<–ArrayList
Collection<–List<–LinkedList
Collection<–Set<–HashSet
Collection<–Set<–HashSet<–LinkedHashSet
Collection<–Set<–SortedSet<–TreeSet
Map<–SortedMap<–TreeMap
Map<–HashMap
(1)hashtable
java.lang.Object
java.util.Dictionary[K,V]
java.util.Hashtable[K,V] 实现了map接口
(2)hashmap
java.lang.Object
–java.util.AbstractMap[K,V]
—-java.util.HashMap[K,V] 实现了map接口
(3)hashset
java.lang.Object
–java.util.AbstractCollection[E]
—-java.util.AbstractSet[E]
——java.util.HashSet[E] 实现set接口
hashmap和hashtable都实现了map接口。二者极为类似。只有如下区别:
hashmap是非synchronized。hashtable是synchronized的。这意味着后者是县城安全的,多个线程可以同时访问hashtable。而多线程访问hashmap需要手动同步。另外,hashmap可以接收null。hashset实现了set接口。意味着不能添加重复的元素。
当hashmap中被插入key为null的entry时,会自动调用putfornullkey方法。