C#中的Hashtable(哈希表)详解

这篇具有很好参考价值的文章主要介绍了C#中的Hashtable(哈希表)详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一、Hashtable(哈希表)

二、常用的Hashtable的构造函数

1、使用默认的初始容量

2、使用指定的初始容量

三、Hashtable常用属性

四、Hashtable元素的添加

五、Hashtable元素的删除

1、Clear()方法

2、Remove()方法

六、Hashtable的遍历

七、Hashtable元素的查找

1、Contains()方法

2、ContainsKey()方法

3、ContainsValue()方法


一、Hashtable(哈希表)

        Hashtable(哈希表)是一种重要的集合类型。

       Hashtable通常称为哈希表,它表示/值对的集合,这些键/值对根据键的哈希代码进行组织。它的每个元素都是一个存储在DictionaryEntry对象中的键/值对。键不能为空引用,但值可以。 

二、常用的Hashtable的构造函数

1、使用默认的初始容量

        使用默认的初始容量、加载因子、哈希代码提供程序和比较器来初始化Hashtable类的新的空实例,语法如下:

    public Hashtable();

2、使用指定的初始容量

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

    public Hashtable(int capacity)
    capacity:Hashtable对象最初可包含的元素的近似数目。

三、Hashtable常用属性

属性

说明

Count

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

IsFixedSize

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

IsReadOnly

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

IsSyncronized

获取一个值,该值指示是否同步对Hashtable的访问

Item

获取或设置与指定键相关联的

Keys

获取包含在Hashtable中的ICollection

SyncRoot

获取可用于同步Hashtable访问的对象

Values

获取包含在Hashtable中的ICollection

四、Hashtable元素的添加

        向Hashtable中添加元素时,可以使用Hashtable类提供的Add()方法。

        Add()方法用来将带有指定键和值的元素添加到Hashtable中,其语法格式:  

    public virtual void Add(Object key,Object value)
    ☑ key:要添加的元素的键。
    ☑ value:要添加的元素的值,该值可以为空引用。

        如果指定了Hashtable的初始容量,则不用限定向Hashtable对象中添加的因子个数。容量会根据加载的因子自动增加。

//hashtable()
//hashtable()属性、使用Add()方法为该Hashtable对象添加元素
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Test7_15
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args is null)                    //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            Hashtable hashtable = new()         //实例化Hashtable对象并添加元素
            {
                { "id", "BH0001" },             //以类似数组的方法添加元素,适合初始化和批量赋值
                { "name", "TM" },
                { "sex", "男" }
            };				
            Console.WriteLine(hashtable.Count);	//获得Hashtable哈希表中的元素个数属性
            hashtable.Add("TEL","6657");        //也可以hashtable.Add();方法添加元素
            Console.WriteLine(hashtable.Count);
            Console.Read();
        }
    }
}
/*运行结果:
3
4   */

五、Hashtable元素的删除

        在Hashtable中删除元素时,可以使用Hashtable类提供的Clear()方法和Remove()方法。下面对这两个方法进行详细介绍。

1、Clear()方法

        Clear()方法用来从Hashtable中移除所有元素,其语法格式:

    public virtual void Clear()
//hashtable()
//使用Clear()方法移除Hashtable中的所有元素
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Test7_16
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args is null)           //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            Hashtable hashtable = new() //实例化Hashtable对象并初始化赋值
            {
                { "id", "BH0001" },     //以类似数组添加元素的方法批量向Hashtable哈希表中添加元素
                { "name", "TM" },
                { "sex", "男" }
            };				
            hashtable.Clear();          //移除Hashtable哈希表中的元素
            Console.WriteLine(hashtable.Count);
            hashtable.Add("TEL","6657");
            Console.WriteLine(hashtable.Count);
            Console.Read();
        }
    }
}
/*运行结果:
0
1   */

2、Remove()方法

        Remove()方法用来从Hashtable中移除带有指定键的元素,其语法格式:

    public virtual void Remove(Object key)
    key:要移除的元素的键。
//hashtable()
//使用Remove()方法移除Hashtable中键=sex的元素

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Test7_17
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args is null)                //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            Hashtable hashtable = new()     //实例化Hashtable对象并初始化赋值
            {
                { "id", "BH0001" },         //向Hashtable哈希表中添加元素
                { "name", "TM" },
                { "sex", "男" }
            };				
            hashtable.Remove("sex");        //移除Hashtable哈希表中的指定键=sex的所有元素
            Console.WriteLine(hashtable.Count);
            Console.Read();
        }
    }
}
/*运行结果:
2
*/

六、Hashtable的遍历

        Hashtable的遍历与数组类似,都可以使用foreach语句。这里需要注意的是,由于Hashtable中的元素是一个键/值对,因此需要使用DictionaryEntry结构来进行遍历。DictionaryEntry结构表示一个键/值对的集合。

//Hashtable()
//Hashtable的遍历与数组类似,都可以使用foreach语句,使用DictionaryEntry结构来进行遍历

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Test7_18
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args is null)                               //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            Hashtable hashtable = new /*Hashtable*/()       //实例化Hashtable对象
            {
                { "id", "BH0001" },                         //向Hashtable哈希表中添加元素
                { "name", "TM" },
                { "sex", "男" }
            };			
            Console.WriteLine("\t 键\t 值");                //格式化输出表头           
            foreach (DictionaryEntry dicEntry in hashtable) //遍历Hashtable哈希表中的元素并输出其键值对
            {
                Console.WriteLine("\t " + dicEntry.Key + "\t " + dicEntry.Value);
            }
            Console.WriteLine();
            Console.Read();
        }
    }
}
/*运行结果:
         键      值
         id      BH0001
         name    TM
         sex     男      */

七、Hashtable元素的查找

        在Hashtable中查找元素时,可以使用Hashtable类提供的Contains()方法、ContainsKey()方法和 ContainsValue()方法

1、Contains()方法

        Contains()方法用来确定Hashtable中是否包含特定键,其语法格式:

    public virtual bool Contains(Object key)
    ☑ key:要在Hashtable中定位的键。
    ☑ 返回值:如果Hashtable包含具有指定键的元素,则为true;否则为false。
//Hashtable()
//Contains()方法用来确定Hashtable中是否包含特定键

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Test7_19
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args is null)                //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            Hashtable hashtable = new()     //实例化Hashtable对象
            {
                { "id", "BH0001" },         //向Hashtable哈希表中添加元素
                { "name", "TM" },
                { "sex", "男" }
            };	    
            Console.WriteLine(hashtable.Contains("id"));//判断Hashtable哈希表中是否包含指定的键id
            Console.Read();
        }
    }
}
/*运行结果:
/*运行结果:
True
*/

2、ContainsKey()方法

        ContainsKey()方法和Contains()方法实现的功能、语法都相同。

3、ContainsValue()方法

        ContainsValue()方法用来确定Hashtable中是否包含特定值,其语法格式文章来源地址https://www.toymoban.com/news/detail-647952.html

    public virtual bool ContainsValue(Object key)
    ☑ value:要在Hashtable中定位的值,该值可以为空引用。
    ☑ 返回值:如果Hashtable包含带有指定的value的元素,则为true;否则为false。
//Hashtable()
//ContainsValue()判断Hashtable哈希表中是否包含指定的值
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;

namespace Test7_20
{
    class Program
    {
        static void Main(string[] args)
        {
            if (args is null)                           //解除IDE0060
            {
                throw new ArgumentNullException(nameof(args));
            }
            Hashtable hashtable = new /*Hashtable*/()   //实例化Hashtable对象
            {
                { "id", "BH0001" },                     //向Hashtable哈希表中添加元素
                { "name", "TM" },
                { "sex", "男" }
            };				
            Console.WriteLine(hashtable.ContainsValue("男"));	//判断Hashtable哈希表中是否包含指定的键值
            Console.Read();
        }
    }
}
/*运行结果:
True
*/

到了这里,关于C#中的Hashtable(哈希表)详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【JavaSE专栏55】Java集合类HashTable解析,基于哈希表实现的唯一性键值对存储数据结构

    作者主页 :Designer 小郑 作者简介 :3年JAVA全栈开发经验,专注JAVA技术、系统定制、远程指导,致力于企业数字化转型,CSDN学院、蓝桥云课认证讲师。 主打方向 :Vue、SpringBoot、微信小程序 本文讲解了 Java 中集合类 HashTable 的语法、使用说明和应用场景,并给出了样例代码。

    2024年02月15日
    浏览(56)
  • JavaEE 初阶篇-线程安全的集合类、多线程环境使用 ArrayList、队列、哈希表(HashMap 、ConCurrentHashMap 、HashTable 的区别)

    🔥博客主页: 【 小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍   文章目录         1.0 线程安全的集合类         1.2 线程安全的集合类 - Vector         1.3 线程安全的集合类 - Stack         1.4 线程安全的集合类 - HashTable         2.0 多线程环境使用 ArrayList        

    2024年04月25日
    浏览(49)
  • 第7章-第7节-Java中的TreeMap和HashTable以及collections工具类

    1、TreeMap: 1)、 概述 TreeMap 是一个有序的key-value集合,它是通过红黑树实现的 2)、 特点 键值对映射关系 一个键对应一个值 键不能重复,值可以重复 键允许为空值 元素有序(具体的排序规则有Comparable 或者 Comparator决定) 3)、 使用  2、HashTable: 1)、 概述 HashTable与Hash

    2024年01月23日
    浏览(50)
  • TensorFlow 用 hashtable 的意义

    TF的hashtable用来存不连续的id/int的embedding的, 就是比如id从1-100000,但1-100000里有很多值是空的, 如果id就是1-500,是满的,从1-500都有值,可以用一个 501 * hidden_size 的embedding_matrix存embedding,然后用embedding_lookup接口读每个id的embedding

    2024年04月28日
    浏览(32)
  • HashTable, HashMap, ConcurrentHashMap 之间的区别

    哈希表的组织形式是这样的: 对于哈希表这种重要而又频繁被使用的数据结构,是否线程安全往往是人们经常考虑的方向之一。 HashTable是线程安全的。但是它的线程安全在于它的关键方法都使用了synchronized,比如get方法、put方法,这就会导致它的 并发程度低下 。它就是相当

    2024年02月11日
    浏览(43)
  • HashMap、HashTable、ConcurrentHashMap 之间的区别

    哈喽,大家好~我是保护小周ღ,本期为大家带来的是 HashMap、HashTable、ConcurrentHashMap 之间的区别,从数据结构到多线程安全~确定不来看看嘛~ 更多精彩敬请期待:保护小周ღ *★,°*:.☆( ̄▽ ̄)/$:*.°★* ‘ HashTable 和 HashMap都是用于存储键值对的数据结构 我们一般把搜索的数据

    2023年04月18日
    浏览(34)
  • HashMap和HashTable的区别是什么?

    HashMap和HashTable都是常见的哈希表实现,用于存储键值对。它们在功能上类似,但在以下几个方面存在区别: 线程安全性:HashTable是线程安全的,它的所有操作都是同步的,即多线程同时访问HashTable时会自动进行同步处理,从而保证线程安全。而HashMap是非线程安全的,它的操

    2024年02月15日
    浏览(37)
  • 【JAVA】concurrentHashMap和HashTable有什么区别

    🍎 个人博客: 个人主页 🏆 个人专栏: JAVA ⛳️   功不唐捐,玉汝于成 目录 前言 正文 同步性质: 性能: 允许空键值(Allow Nulls): 迭代器(Iterator): 继承关系: 结语  我的其他博客 在Java的集合框架中, ConcurrentHashMap 和 HashTable 都提供了线程安全的哈希表实现,用

    2024年01月16日
    浏览(52)
  • 【Java】HashMap、HashTable和ConcurrentHashMap的区别

    HashTable、HashMap和ConcurrentHashMap之间的区别主要体现在线程安全、继承关系与实现接口、对null值的处理、性能以及数据结构等几个方面。以下是对这三者之间区别的详细分析: 项目 HashMap HashTable ConcurrentHashMap null键 允许(仅能有一个) 不允许 允许(仅能有一个) null值 允许

    2024年04月25日
    浏览(56)
  • HashTable设计思想和在JVM中说明

    The algorithmic implementation principles of HashTable : Hash function: HashTable uses a hash function to map keys to the index of storage buckets. The hash function converts the value of a key into an integer, which is then used to calculate the index of the storage bucket. A good hash function should distribute keys evenly across different buckets, reducin

    2024年02月13日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包