`
tomotoboy
  • 浏览: 166843 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

HashTable介绍

    博客分类:
  • Java
 
阅读更多
public class Hashtable<K,V>extends Dictionary<K,V>implements Map<K,V>, Cloneable, Serializable

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

为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法。

Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子。
  • 容量 是哈希表中桶 的数量初始容量 就是哈希表创建时的容量。
  • 加载因子 是对哈希表在其容量自动增加之前可以达到多满的一个尺度。
注意:哈希表的状态为 open:在发生“哈希冲突”的情况下,单个桶会存储多个条目,这些条目必须按顺序搜索。初始容量和加载因子这两个参数只是对该实现的提示。关于何时以及是否调用 rehash 方法的具体细节则依赖于该实现。

通常,默认加载因子(.75)在时间和空间成本上寻求一种折衷。加载因子过高虽然减少了空间开销,但同时也增加了查找某个条目的时间(在大多数 Hashtable 操作中,包括 get 和 put 操作,都反映了这一点)。

初始容量主要控制空间消耗与执行 rehash 操作所需要的时间损耗之间的平衡。如果初始容量大于 Hashtable 所包含的最大条目数除以加载因子,则永远 不会发生 rehash 操作。但是,将初始容量设置太高可能会浪费空间。

如果很多条目要存储在一个 Hashtable 中,那么与根据需要执行自动 rehashing 操作来增大表的容量的做法相比,使用足够大的初始容量创建哈希表或许可以更有效地插入条目。

下面这个示例创建了一个数字的哈希表。它将数字的名称用作键:

  
Hashtable<String, Integer> numbers
     = new Hashtable<String, Integer>();
   numbers.put("one", 1);
   numbers.put("two", 2);
   numbers.put("three", 3);

  
要获取一个数字,可以使用以下代码:

  
Integer n = numbers.get("two");
     if (n != null) {
         System.out.println("two = " + n);
     }
   }



由所有类的“collection 视图方法”返回的 collection 的 iterator 方法返回的迭代器都是快速失败 的:在创建 Iterator 之后,如果从结构上对 Hashtable 进行修改,除非通过 Iterator 自身的 remove 方法,否则在任何时间以任何方式对其进行修改,Iterator 都将抛出ConcurrentModificationException。因此,面对并发的修改,Iterator 很快就会完全失败,而不冒在将来某个不确定的时间发生任意不确定行为的风险。由 Hashtable 的键和元素方法返回的 Enumeration不是快速失败的。

注意,迭代器的快速失败行为无法得到保证,因为一般来说,不可能对是否出现不同步并发修改做出任何硬性保证。快速失败迭代器会尽最大努力抛出 ConcurrentModificationException。因此,为提高这类迭代器的正确性而编写一个依赖于此异常的程序是错误做法:迭代器的快速失败行为应该仅用于检测程序错误。

从Java 2 平台 v1.2起,此类就被改进以实现 Map 接口,使它成为 Java Collections Framework 中的一个成员。不像新的 collection 实现,Hashtable 是同步的 。
分享到:
评论

相关推荐

    hashtable购物车Session+Hashtable实现

    #### 二、Hashtable介绍 在.NET Framework中,`Hashtable`是`System.Collections`命名空间提供的一种数据结构,用于处理和表示类似键/值(Key/Value)对的数据。其中: - **键**:通常用于快速查找,并且是区分大小...

    数组和集合对象(二) Hashtable练习

    二、Hashtable介绍 `Hashtable`是.NET框架中的一个类,它继承自`DictionaryBase`,并实现了`IDictionary`接口。它是一个无序的、不可变的键值对集合,其中键必须实现`Equals`和`GetHashCode`方法以确保唯一性。`...

    WinFormHashTable最简单用法,.net hashtable ,hashtable ,hashtable用法

    下面将详细介绍WinForm中使用Hashtable的基本概念、用法及其优势。 1. **什么是Hashtable** Hashtable是System.Collections命名空间下的一个类,它是基于散列(Hashing)的字典容器,用于存储键值对。散列技术通过...

    HashMap与HashTable区别

    下面将详细介绍`HashMap`和`HashTable`之间的区别。 #### 一、线程安全性 - **HashTable**: 是线程安全的。它通过内部同步(synchronized)机制确保了多线程环境下的安全性。这意味着在多线程环境中,对`HashTable...

    hashmap与hashtable区别

    然而,在实际应用过程中,这两种数据结构有着本质的不同,下面将详细介绍这些差异。 #### 1. 历史背景及实现原理 - **Hashtable**:该类继承自`Dictionary`类,并且实现了`Map`接口。它最早出现在Java 1.0版本中,...

    C#企业培训第五课源码(类的应用)

    1. **Hashtable介绍**:Hashtable是.NET框架中的一个内置集合类,它是基于键值对(Key-Value Pair)的存储结构,实现了`IDictionary`接口。它不保证元素的顺序,且不允许重复的键。 2. **添加元素**:可以使用`Add...

    Hashtable的使用

    本文将详细介绍`Hashtable`的基本用法,包括插入元素、查找元素、遍历以及其相关操作。 ### 1. 创建与初始化 创建一个`Hashtable`实例很简单,只需调用其构造函数即可: ```java Hashtable, Integer&gt; table = new...

    HashTable 常用操作

    ### HashTable常用操作详解 ...本文详细介绍了`.NET Framework`中的`Hashtable`类以及如何使用它来进行基本和高级的操作。通过学习这些知识点,开发者可以更好地理解和利用`Hashtable`来优化程序的性能。

    c# asp.net hashtable对Datalist分页

    本篇文章将详细介绍如何利用C#中的Hashtable对象对Datalist进行分页处理。 首先,我们需要理解Datalist是ASP.NET提供的一种数据绑定控件,它可以用来显示列表或网格格式的数据。与GridView相比,Datalist提供了更多...

    hashtable的使用

    通过以上介绍和示例代码,我们可以看到,在.NET Framework中,虽然哈希表默认并不支持排序,但通过一些技巧,如使用`ArrayList`配合哈希表,我们可以方便地实现自定义排序的需求。这种方式不仅能够保持哈希表原有的...

    在J2ME环境下把JSON解析为Hashtable

    本篇文章将详细介绍如何在J2ME环境下将JSON数据解析为Hashtable。 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。在上述场景中,服务器通过Web ...

    使用哈希表Hashtable填充ListBox

    本文将详细介绍如何使用`Hashtable`来填充`ListBox`,并探讨相关知识点。 1. 哈希表(HashTable)基础知识: - 哈希表基于哈希函数,通过计算键的哈希值来确定其在表中的位置,实现快速查找。 - `Hashtable`是...

    javascript hashtable 修正版 下载

    从提供的文件内容来看,该文档主要介绍了JavaScript中一种名为"hashtable"的数据结构的修正版,它允许用户在JavaScript环境中使用类似散列表或哈希表的数据结构。以下是根据文件内容总结的知识点: 1. **JavaScript...

    Hashtable与ArrayList的简单应用

    本文将详细介绍如何在C#中使用 `Hashtable` 和 `ArrayList` 来处理数据,并通过一个具体的例子来展示这两种数据结构的应用场景。 #### 二、`Hashtable` 详解 ##### 2.1 概念介绍 `Hashtable` 是一个键值对集合,它...

    hashmap和hashtable的区别.docx

    以下将详细介绍这两个类的主要区别: 1. 线程安全性: - HashMap 不是线程安全的,这意味着在多线程环境下,如果不进行适当的同步控制,可能会导致数据不一致或异常。例如,当一个线程正在修改 HashMap 时,其他...

    【ASP.NET编程知识】asp.net基于HashTable实现购物车的方法.docx

    本文将详细介绍 ASP.NET 基于 HashTable 实现购物车的方法,包括 HASH TABLE 的应用、购物车的实现、 Session 的使用等。 一、HASH TABLE 的应用 HashTable 是一种基于键值对的数据结构,ASP.NET 中提供了 ...

    在C#中应用哈希表(Hashtable)

    ### 在C#中应用哈希表...通过以上介绍,我们可以看到哈希表在C#中提供了非常强大且灵活的功能,适用于多种场景下的数据处理和管理需求。无论是简单的数据查找还是复杂的键值对管理,哈希表都能够提供高效的解决方案。

    C#中哈希表(Hashtable)的介绍及简单用法

    Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对 &lt;BR&gt;&lt;BR&gt;在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value); 在哈希表中去除某个key/value键值对:...

    JAVASCRIPT HashTable

    本篇介绍了如何在JavaScript中实现一个简单的哈希表。通过这个简单的例子,我们不仅可以了解哈希表的基本工作原理,还能掌握在实际开发中如何利用哈希表提高程序效率。值得注意的是,这里的实现并未涉及哈希冲突处理...

    Hashtable的用法---马克-to-win Java视频

    Hashtable的用法---马克-to-win Java视频哈希表的详细介绍

Global site tag (gtag.js) - Google Analytics