- Hashtable是原始的java.util的一部分,是一个Dictionary具体的实现
- Java 2重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集和框架中。它和HashMap类很相似,但是它支持同步
- 像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键值的对象,以及要链接到该键的值。(对象/值)
Hashtable构造方法
Hashtable() //默认构造方法
Hashtable(int size) //创建指定大小的哈希表
Hashtable(int size,float fillRatio) //创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例
Hashtable(Map m) //创建了一个以M中元素为初始化元素的哈希表
Hashtable方法
序号 | 方法 | 描述 |
---|---|---|
1 | void clear( ) | 将此哈希表清空,使其不包含任何键。 |
2 | Object clone( ) | 创建此哈希表的浅表副本。 |
3 | boolean contains(Object value) | 测试此映射表中是否存在与指定值关联的键。 |
4 | boolean containsKey(Object key) | 测试指定对象是否为此哈希表中的键。 |
5 | boolean containsValue(Object value) | 如果此 Hashtable 将一个或多个键映射到此值,则返回 true。 |
6 | Enumeration elements( ) | 返回此哈希表中的值的枚举。 |
7 | Object get(Object key) | 返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。 |
8 | boolean isEmpty( ) | 测试此哈希表是否没有键映射到值。 |
9 | Enumeration keys( ) | 返回此哈希表中的键的枚举。 |
10 | Object put(Object key, Object value) | 将指定 key 映射到此哈希表中的指定 value。 |
11 | void rehash( ) | 增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。 |
12 | Object remove(Object key) | 从哈希表中移除该键及其相应的值。 |
13 | int size( ) | 返回此哈希表中的键的数量。 |
14 | String toString( ) | 返回此 Hashtable 对象的字符串表示形式,其形式为 ASCII 字符 ", " (逗号加空格)分隔开的、括在括号中的一组条目。 |
HashMap和HashTable的区别
转博客园:仰望天空丶路人
HashMap和HashTable的区别是面试时面试官经常问的问题,在回答的时候可以选择重点做回答,区别主要有下面几点:
key和value的取值范围不同
HashMap和HashTable都是基于哈希表来实现键值映射的工具类,底层都是哈希表结构。
HashMap允许键为null,值为null,对于HashMap如果使用get方法返回null,并不能表明HashMap不存在这个key,有可能是键对应的值为null。
HashTable则不允许null键和null值。
线程安全
HashMap是非synchronized的,而HashTable是synchronized的。synchronized是Java语言的关键字,可用来给对象和方法或者代码块加锁,当它锁定一个方法或者一个代码块的时候,同一时刻最多只有一个线程执行这段代码。这说明HashTable是线程安全的,而HashMap线程不安全。
效率与同步
HashMap是不同步的、效率高的,HashTable是同步的、效率低的。
虽然HashMap不是线程安全的,但是它的效率会比HashTable要好很多。这样设计是合理的。在我们的日常使用当中,大部分时间是单线程操作的。HashMap把这部分操作解放出来了。
当需要多线程操作的时候可以使用线程安全的ConcurrentHashMap。ConcurrentHashMap虽然也是线程安全的,但是它的效率比HashTable要高很多。
选择与使用
如果不需要线程安全,那么使用HashMap,如果需要线程安全,那么使用ConcurrentHashMap,ConcurrentHashMap不但是线程安全的,效率也比HashTable要高,HashTable已经几乎被淘汰了。