`
coollifer
  • 浏览: 55970 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

C#集合之HASHTABLE

    博客分类:
  • C#
 
阅读更多

 

1、HashTable定义

System.Collections. Hashtable类表示键/值对的集合,这些键/值对根据键的哈希代码进行组织, 每个元素都是一个存储在 DictionaryEntry 对象中的键/值对。键不能为 null,但值可以。

2.优点

1、通过Key快速查找。

2、Hashtable 是线程安全的。

3. Hashtable的构造器

构造器函数

注释

Public Hashtable ()

使用默认的初始容量(容量大小为0)、加载因子、哈希代码提供程序和比较器来初始化 Hashtable 类的新的空实例。

public Hashtable (IDictionary)

通过将指定字典中的元素复制到新的 Hashtable 对象中,初始化 Hashtable 类的一个新实例。新Hashtable 对象的初始容量等于复制的元素数,并且使用默认的加载因子、哈希代码提供程序和比较器。

public Hashtable (Int32)

使用指定的初始容量、默认加载因子、默认哈希代码提供程序和默认比较器来初始化 Hashtable 类的新的空实例。

4、Hashtable的属性

属性名

注释

Count

获取包含在 Hashtable 中的键/值对的数目。

IsFixedSize

获取一个值,该值指示 Hashtable 是否具有固定大小。

IsReadOnly

获取一个值,该值指示 Hashtable 是否为只读。

Keys

获取包含 Hashtable 中的键的 ICollection

Values

获取包含 Hashtable 中的值的 ICollection。

5. Hashtable的方法

方法名

注释

Void Add(object key,object value)

将带有指定键和值的元素添加到 Hashtable 中。

Void Clear()

从 Hashtable 中移除所有元素。

Bool Contains(object key)

确定 Hashtable 是否包含特定键。

Bool ContainsKey(object key)

确定 Hashtable 是否包含特定键。

Bool ContainsValue(object value)

确定 Hashtable 是否包含特定值。

Void Remove(object key)

从 Hashtable 中移除带有指定键的元素。

Void InsertRange(int index,Icollection collec)

用于从指定位置开始添加一批元素,列表后面的元素依次往后移动

Clone()

创建 Hashtable 的浅表副本。

GetObjectData()

实现 ISerializable 接口,并返回序列化 Hashtable 所需的数据。

 

6、Hashtable的使用示例

 

public class Program
{
        public static void Main(string[] args)
        {
            //创建一个HashTable
            Hashtable openWith = new Hashtable();

            //为HashTable添加元素,不能有重复的key,但可以有重复的值
            openWith.Add("txt", "notepad.exe");
            openWith.Add("bmp", "paint.exe");
            openWith.Add("dib", "paint.exe");
            openWith.Add("rtf", "wordpad.exe");

            

            //添加重复的key,会抛出异常
            try
            {
                openWith.Add("txt", "winword.exe");
            }
            catch
            {
                Console.WriteLine("An element with Key = \"txt\" already exists.");
            }

            //通过key获得值 
            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

            //重新赋值
            openWith["rtf"] = "winword.exe";
            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

            //以赋值的方式,创建一个新元素
            openWith["doc"] = "winword.exe";

            //如果HashTable中不包含该元素,将抛出异常(经测试这里不抛出异常)
            //原因(如果未找到指定的键,尝试获取它将返回 空引用(在 Visual Basic 中为 Nothing),尝试设置它将使用指定的键创建新元素。 )
            try
            {
                Console.WriteLine("For key = \"tif\", value = {0}.", openWith["tif"]);
            }
            catch
            {
                Console.WriteLine("Key = \"tif\" is not found.");
            }

            //判断是否包含特定的key
            if (!openWith.ContainsKey("ht"))
            {
                openWith.Add("ht", "hypertrm.exe");
                Console.WriteLine("Value added for key = \"ht\": {0}", openWith["ht"]);
            }

            //遍历HashTable
            Console.WriteLine();
            foreach (DictionaryEntry de in openWith)
            {
                Console.WriteLine("Key = {0}, Value = {1}", de.Key, de.Value);
            }

            // 获取HashTable中值的集合
            ICollection valueColl = openWith.Values;


            Console.WriteLine();
            foreach (string s in valueColl)
            {
                Console.WriteLine("Value = {0}", s);
            }

            // 获取HashTable中键的集合
            ICollection keyColl = openWith.Keys;


            Console.WriteLine();
            foreach (string s in keyColl)
            {
                Console.WriteLine("Key = {0}", s);
            }


            Console.WriteLine("\nRemove(\"doc\")");
            //移除指定的元素
            openWith.Remove("doc");

            if (!openWith.ContainsKey("doc"))
            {
                Console.WriteLine("Key \"doc\" is not found.");
            }


            Hashtable mySourceHT = new Hashtable();
            mySourceHT.Add("A", "valueA");
            mySourceHT.Add("B", "valueB");

            // 创建一个字符串数组
            String[] myTargetArray = new String[15];
            myTargetArray[0] = "The";
            myTargetArray[1] = "quick";
            myTargetArray[2] = "brown";
            myTargetArray[3] = "fox";
            myTargetArray[4] = "jumped";
            myTargetArray[5] = "over";
            myTargetArray[6] = "the";
            myTargetArray[7] = "lazy";
            myTargetArray[8] = "dog";

            // 遍历数组的值
            Console.WriteLine("The target Array contains the following before:");
            PrintValues(myTargetArray, ' ');

            //将hashtable中的key复制到数组中
            Console.WriteLine("After copying the keys, starting at index 6:");
            mySourceHT.Keys.CopyTo(myTargetArray, 6);

            
            PrintValues(myTargetArray, ' ');

            //将hashtable中的Value复制到数组中
            Console.WriteLine("After copying the values, starting at index 6:");
            mySourceHT.Values.CopyTo(myTargetArray, 6);

            PrintValues(myTargetArray, ' ');

            Console.Read();
        }

        //遍历数据方法
        public static void PrintValues(String[] myArr, char mySeparator)
        {
            for (int i = 0; i < myArr.Length; i++)
                Console.Write("{0}{1}", mySeparator, myArr[i]);
            Console.WriteLine();
        }

    }
 

 

7、Hashtable遍历方法

方法一

 foreach (System.Collections.DictionaryEntry objDE in objHasTab)
{
    Console.WriteLine(objDE.Key.ToString());
    Console.WriteLine(objDE.Value.ToString());
}

 

方法二

System.Collections.IDictionaryEnumerator enumerator = objHashTablet.GetEnumerator(); 
while (enumerator.MoveNext())
{
    Console.WriteLine(enumerator.Key);         // Hashtable关健字
    Console.WriteLine

}

8、Hashtable排序

//把ht的键对象全部复制到ArrayList中

 ArrayList al = new ArrayList(ht.Keys);

 /*ht.Keys返回ht中所有键对象构成的集合,把该集合传递给ArrayList构造方法则得到一个包

*所有键对象的动态数组

*/

  al.Sort();//从小到大排列

  //排序完成输出

   for (int i = 0; i < al.Count;i++ )

   {

          object e=al[i];

          object temp = (object)ht[e];//键作为索引器来获得对应的值对象

           Console.WriteLine(temp.tostring());

}

分享到:
评论

相关推荐

    C# json 转hashtable

    与此相关的,`Hashtable`是.NET框架中的一个古老的集合类,用于存储键值对,它在早期的.NET应用中十分常见。然而,随着.NET Framework的发展,`Dictionary, TValue&gt;`逐渐取代了`Hashtable`,因为后者不支持泛型,且...

    C#-Hashtable应用

    Hashtable是C#编程语言中的一种内置数据结构,属于.NET Framework的System.Collections命名空间。它是一个基于散列的键值对集合,允许程序员快速查找、添加和删除元素。在本篇文档中,我们将深入探讨如何在C#中有效...

    c#重写HashTable

    在C#编程中,`HashTable`是一个非泛型集合类,它在.NET Framework早期版本中被广泛使用。然而,随着.NET Framework的不断发展,`HashTable`逐渐被更安全、类型安全且性能更高的`Dictionary, TValue&gt;`所取代。尽管...

    C# .net HashTable

    在C# .NET编程环境中,`HashTable`类是一个非同步、无序的键值对集合,它提供了快速的数据存储和检索功能。`HashTable`类是基于哈希表数据结构实现的,这使得它能够通过键(key)来快速查找值(value)。在本文中,...

    C#集合的概念

    学习C#集合时,开发者需要熟悉这些泛型集合的接口、属性和方法,以便在实际开发中选择合适的集合类型来满足特定需求。例如,如果需要快速查找元素,哈希集和字典可能更适合;如果需要保持元素的顺序,列表和双向链接...

    c#通讯录hashtable

    在C#编程中,`Hashtable`是一个非常重要的数据结构,它是.NET框架中提供的一种基于哈希表的键值对集合。本篇文章将深入探讨`Hashtable`在创建通讯录场景中的应用,以及它所涉及的相关知识点。 `Hashtable`是C#中的...

    Hashtable练习及参考答案

    Hashtable练习及参考答案

    C# 集合的索引性能比较

    在C#编程中,集合是数据存储和管理的基础,它们提供了灵活的方式来进行数据操作。本篇文章将重点关注四个常见的集合类型:ArrayList、List、Hashtable和DataSet,并对它们的索引性能进行测试和对比。 首先,...

    C#集合容器(collection)详解

    ### C#集合容器(collection)详解 #### 一、集合的概念与分类 集合是C#语言中用于存储一组数据的一种机制,它可以是不同类型的对象。在.NET框架中,集合通过实现`System.Collections.ICollection`、`System....

    C#集合性能测试

    日常工作中我们用到各种集合,但对于他们的性能比较则不是太清楚,因为片处的数据量不大,所以性能优势无法体现,本测试程序可以直观的测试各种集合的性能ArrayList 、List 、Dictionary、Hashtable

    C#将hashtable值转换到数组中的方法

    在C#编程中,`Hashtable` 是一种常用的集合类,它允许我们存储键值对数据。在某些场景下,我们可能需要将 `Hashtable` 中的值转换为数组,以便进行进一步的操作或处理。这里我们将详细讲解如何使用 `CopyTo` 方法来...

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

    在C#编程语言中,数组和集合对象是两种常见的数据结构,它们用于存储和管理一组相关的数据。本篇文章将重点讨论`Hashtable`类的使用,它是一个非同步的、键值对存储的集合,适用于存储不重复的键,并且允许快速访问...

    C#泛型集合与非泛型集合

    这些集合在设计之初并未考虑到类型安全性的问题,因此它们只能存储 `object` 类型的对象,这导致了以下问题: 1. **性能问题**:由于非泛型集合存储的是 `object` 类型,这意味着当向集合中添加基本类型(如 `int`...

    c#集合的学习读书笔记 学习心得

    本文将深入探讨C#集合的学习心得,并基于给出的部分内容进行详细阐述。 首先,数组作为基本的数据结构,有其固有的限制。数组大小在创建时即被固定,若需调整大小,必须借助`System.Array.Resize`方法,但这种方法...

    C#中的集合示例(Array,ArrayList,Hashtable,List)

    在C#编程语言中,集合是用于存储一组对象的数据结构。它们提供了方便的方式来组织和操作数据。本篇文章将深入探讨三种常见的集合类型:Array、ArrayList、Hashtable以及泛型的List,并提供相关的示例代码来帮助理解...

    C#用Hashtable做的学生管理系统

    总的来说,"C#用Hashtable做的学生管理系统"是一个很好的学习项目,它涵盖了C#的基础知识,包括面向对象编程、集合的使用、用户界面设计和事件处理。对于初学者,这是一个理解和实践C#编程的好机会。不过,为了提升...

    c#数据结构之array,arraylist,hashtable,dictionary

    C#数据结构之Array、ArrayList、Hashtable、Dictionary C#中有多种数据结构可以用来存储和管理数据,今天我们将讨论四种常用的数据结构:Array、ArrayList、Hashtable和Dictionary。这些数据结构都是_Collections_...

    C# 集合类的各个详细的介绍

    C# 是一种面向对象的编程语言,其标准库提供了丰富的集合类来帮助开发者管理数据。在C#中,集合类是用于存储一组对象的数据结构,它们提供了多种操作这些对象的方法。下面将详细介绍C#中的一些主要集合类以及它们的...

    c#集合学习笔记(.doc格式)

    C#集合是编程中不可或缺的一部分,它提供了存储和管理数据的有效方式。在这篇学习笔记中,我们将探讨几个关键的集合类,包括System.Array、ArrayList、Hashtable以及SortedList,以及它们的特点和常用方法。 首先,...

    dotnet C# 字典 Dictionary 和 Hashtable 的性能对比.rar

    本篇文章将深入探讨`Dictionary`和`Hashtable`的区别以及在C#开发中的应用。 首先,`Dictionary, TValue&gt;`是C#标准库中的一个泛型类,自.NET Framework 2.0起引入。它的主要优点在于类型安全性,因为键和值都是强...

Global site tag (gtag.js) - Google Analytics