Java数据结构——哈希表(Hashtable)

  1. Hashtable是原始的java.util的一部分,是一个Dictionary具体的实现
  2. Java 2重构的Hashtable实现了Map接口,因此,Hashtable现在集成到了集和框架中。它和HashMap类很相似,但是它支持同步
  3. 像HashMap一样,Hashtable在哈希表中存储键/值对。当使用一个哈希表,要指定用作键值的对象,以及要链接到该键的值。(对象/值)
    Hashtable构造方法
Hashtable()							//默认构造方法

Hashtable(int size)					//创建指定大小的哈希表

Hashtable(int size,float fillRatio)	//创建了一个指定大小的哈希表,并且通过fillRatio指定填充比例

Hashtable(Map m)					//创建了一个以M中元素为初始化元素的哈希表

Hashtable方法

序号方法描述
1void clear( )将此哈希表清空,使其不包含任何键。
2Object clone( )创建此哈希表的浅表副本。
3boolean contains(Object value)测试此映射表中是否存在与指定值关联的键。
4boolean containsKey(Object key)测试指定对象是否为此哈希表中的键。
5boolean containsValue(Object value)如果此 Hashtable 将一个或多个键映射到此值,则返回 true。
6Enumeration elements( )返回此哈希表中的值的枚举。
7Object get(Object key)返回指定键所映射到的值,如果此映射不包含此键的映射,则返回 null. 更确切地讲,如果此映射包含满足 (key.equals(k)) 的从键 k 到值 v 的映射,则此方法返回 v;否则,返回 null。
8boolean isEmpty( )测试此哈希表是否没有键映射到值。
9Enumeration keys( )返回此哈希表中的键的枚举。
10Object put(Object key, Object value)将指定 key 映射到此哈希表中的指定 value。
11void rehash( )增加此哈希表的容量并在内部对其进行重组,以便更有效地容纳和访问其元素。
12Object remove(Object key)从哈希表中移除该键及其相应的值。
13int size( )返回此哈希表中的键的数量。
14String 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已经几乎被淘汰了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值