基于哈希值的table集合HashTable

此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。

HashTable类的实现类似于HashMap类,但是还有有区别的:线程安全性,同步(synchronization),以及速度。

  1. HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)和值(value),而Hashtable则不行)。
  2. HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtable;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java 5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。
  3. 另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也是Enumeration和Iterator的区别。
  4. 由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程,那么使用HashMap性能要好过Hashtable。
  5. HashMap不能保证随着时间的推移Map中的元素次序是不变的。
时间: 2024-10-22 12:55:12

基于哈希值的table集合HashTable的相关文章

基于哈希值的Set集合HashSet

此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用 null 元素. 此类的实现类似于HashMap,此类的容器保存的元素也是键值对Entry,其中key指向当前添加的操作对象,value的固定为 Object类的实例化对象 private static final Object PRESENT = new Object(); public boolean add(E e) { return map

HashSet 哈希值

字符串的哈希值 任何对象都有哈希值 在java.lang.Object类中 有方法如下,所以所有类的对象都可以调用这个方法 int hashCode() 返回该对象的哈希码值. 若没有重写父类的hashCode()方法 每次调用方法都返回不同的哈希值 java.lang.String 类 已经重写了父类java.lang.Object的hashCode()方法 所以对于"str1".hashCode() 的返回值无论运行多少次都一样 HashSet是怎么保证不存入重复元素的 要存入的元

Java 集合Hashtable源码深入解析

概要 前面,我们已经系统的对List进行了学习.接下来,我们先学习Map,然后再学习Set:因为Set的实现类都是基于Map来实现的(如,HashSet是通过HashMap实现的,TreeSet是通过TreeMap实现的). 首先,我们看看Map架构.如上图:(01) Map 是映射接口,Map中存储的内容是键值对(key-value).(02) AbstractMap 是继承于Map的抽象类,它实现了Map中的大部分API.其它Map的实现类可以通过继承AbstractMap来减少重复编码.(

java集合-HashTable

概述 和 HashMap 一样,Hashtable 也是一个散列表,它存储的内容是键值对. Hashtable 在 Java 中的定义为: public class Hashtable<K,V> extends Dictionary<K,V> implements Map<K,V>, Cloneable, java.io.Serializable 从源码中,我们可以看出,Hashtable 继承于 Dictionary 类,实现了 Map, Cloneable, jav

基于哈希的图像检索技术

为什么在图像检索里面使用到哈希(hashing)算法? 基于哈希算法的图像检索方法将图片的高维内容特征映射到汉明空间(二值空间)中,生成一个低维的哈希序列来表示一幅图片,降低了图像检索系统对计算机内存空间的要求,提高了检索速度,能更好的适应海量图片检索的要求. 最近或者最近邻问题在大规模的数据查询中用得非常多.但是他们都会遇到一个问题,就是"维数灾难".也就是说当数据的维数太大的时候,之前的那些索引方法(如KD树)就不能起到作用,这时候新的方法就很有必要,哈希算法满足了这个要求. ?

Java入门系列之集合Hashtable源码分析(十一)

前言 上一节我们实现了散列算法并对冲突解决我们使用了开放地址法和链地址法两种方式,本节我们来详细分析源码,看看源码中对于冲突是使用的哪一种方式以及对比我们所实现的,有哪些可以进行改造的地方. Hashtable源码分析 我们通过在控制台中实例化Hashtable并添加键值对实例代码来分析背后究竟做了哪些操作,如下: public static void main(String[] args) { Hashtable hashtable = new Hashtable(); hashtable.p

PHP关联数组与哈希表(hash table) 不指定

PHP中有一种数据类型非常重要,它就是关联数组,又称为哈希表(hash table),是一种非常好用的数据结构. 在程序中,我们可能会遇到需要消重的问题,举一个最简单的模型: 有一份用户名列表,存储了 10000 个用户名,没有重复项: 还有一份黑名单列表,存储了 2000 个用户名,格式与用户名列表相同: 现在需要从用户名列表中删除处在黑名单里的用户名,要求用尽量快的时间处理. 这个问题是一个小规模的处理量,如果实际一点,2 个表都可能很大,比如有 2 亿条记录. 我最开始想到的方法,就是做一

JavaScript系列-----对象基于哈希存储(&lt;Key,Value&gt;之Value篇) (2)

JavaScript系列-----Objectj基于哈希存储<Key,Value>之Value 1.问题提出 在JavaScript系列-----Object之基于Hash<Key,Value>存储之Key篇 (1)中,我们推理出:对象是以Hash结构存储的,对象的属性被表示为多个<Key,Value>键值对. 其中,Key的数据类型是字符串,但是,我们并没有说Value是以什么数据结构存储的,在本文中,我们将继续讨论:Value的存储类型-----博文的核心 既然在J

利用哈希值封死飞秋等客户端软件

实验环境: AD:server2012 r2 测试客户端:xp server2012r2 因为没有2008r2的环境临时用2012r2 代替,其实都是一样的.测试客户端用server2012r2 测试啦跟win7一样的,同时也测试了一下xp 因为好多2008以后的自带策略在xp下是不被支持的.(很庆幸这个策略是被xp支持的) 由于没有飞秋软件.利用.EXE的yy安装程序测试,飞秋也只是一个.EXE的运行程序而已一样的操作步骤 一. 利用AD组策略软件限制策略. 在组策略对象里面新建一条策略 右键