哈希表(Hashtable)

在.NET Framework中,Hashtable 是 System.Collections 命名空间提供的一个容器,用于处理和表现类似 key-value 的键值对,其中 key 通常可用来快速查找,同时 key 是区分大小写;value 用于存储对应于 key 的值。

Hashtable 中 key-value 键值对均为 object 类型,所以 Hashtable 可以支持任何类型的 key-value 键值对。

创建Hashtable实例

Hashtable ht = new Hashtable();

Add 添加key-value键值对

ht.Add("A", "");
ht.Add("B", "");
ht.Add("C", "");
ht.Add("D", "");

遍历

// 遍历哈希表只能用foreach来遍历,因为Hashtable不能用索引访问
// 遍历key
foreach (Object item in ht.Keys)
{
Console.WriteLine((string)item);
}
// 遍历value
foreach (Object item in ht.Values)
{
Console.WriteLine((string)item);
}
//遍历
foreach (DictionaryEntry de in ht)
{
Console.WriteLine("Key : {0} ; Value : {1}.", de.Key, de.Value);
}
// 遍历哈希表(结果与上面相同)
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
while (myEnumerator.MoveNext())
{
Console.WriteLine("Key : {0} ; Value : {1}.", myEnumerator.Key, ht[myEnumerator.Key]);
}

哈希表排序

ArrayList list = new ArrayList(ht.Keys);
list.Sort();
foreach (string key in list)
{
Console.WriteLine("Key : {0} ; Value : {1}.", key, ht[key]);
}

赋值

ht["A"] = "你好";

Contains 判断哈希表是否包含特定键

//返回值为 true 或 false
if (ht.Contains("A"))
{
Console.WriteLine("Key : {0} ; Value : {1}.", "A", ht["A"]);
}

Remove 移除一个key-value键值对

ht.Remove("C");

Clear 移除所有元素

ht.Clear();

Clone 复制

Hashtable ht2 = ht.Clone() as Hashtable;
ht2["A"] = "世界";
ht["B"] = "晚安";
ht.Add("E", "");

可以看到,Clone 以后,两个 Hashtable 是互不影响的。

CopyTo 将HashTable中键或值列表复制到数组中

String[] myTargetArray = new String[];
myTargetArray[] = "The";
myTargetArray[] = "quick";
myTargetArray[] = "brown";
myTargetArray[] = "fox";
myTargetArray[] = "jumped";
myTargetArray[] = "over";
myTargetArray[] = "the";
myTargetArray[] = "lazy";
myTargetArray[] = "dog";
ht.Keys.CopyTo(myTargetArray, ); //赋值键到数组中,从第7位起覆盖。
ht.Values.CopyTo(myTargetArray, );//赋值值到数组中,从第7位起覆盖。

未执行 ht.Keys.CopyTo(myTargetArray, 6) 前

执行 ht.Keys.CopyTo(myTargetArray, 6) 后

执行 ht.Values.CopyTo(myTargetArray, 10) 后

完整代码

using System;
using System.Collections;//使用Hashtable时,必须引入这个命名空间 namespace ConsoleTest
{
class HashtableTest
{
public static void HashtableTestMain()
{
// 创建一个Hashtable实例
Hashtable ht = new Hashtable(); // 添加key-value键值对
ht.Add("A", "");
ht.Add("B", "");
ht.Add("C", "");
ht.Add("D", ""); // 遍历哈希表只能用foreach来遍历,因为Hashtable不能用索引访问
// 遍历key
foreach (Object item in ht.Keys)
{
Console.WriteLine("Key : {0} ;", (string)item);
}
// 遍历value
foreach (Object item in ht.Values)
{
Console.WriteLine("Value : {0} ;", (string)item);
}
//遍历
foreach (DictionaryEntry de in ht)
{
Console.WriteLine("Key : {0} ; Value : {1}.", de.Key, de.Value);
} // 哈希表排序
ArrayList list = new ArrayList(ht.Keys);
list.Sort();
foreach (string key in list)
{
Console.WriteLine("Key : {0} ; Value : {1}.", key, ht[key]);
} // 赋值
ht["A"] = "你好"; // 判断哈希表是否包含特定键,其返回值为true或false
if (ht.Contains("A"))
{
Console.WriteLine("Key : {0} ; Value : {1}.", "A", ht["A"]);
} // 移除一个key-value键值对
ht.Remove("C"); // 遍历哈希表
IDictionaryEnumerator myEnumerator = ht.GetEnumerator();
while (myEnumerator.MoveNext())
{
Console.WriteLine("Key : {0} ; Value : {1}.", myEnumerator.Key, ht[myEnumerator.Key]);
} // 复制
Hashtable ht2 = ht.Clone() as Hashtable;
ht2["A"] = "世界";
ht["B"] = "晚安";
ht.Add("E", ""); // 将HashTable中键或值列表复制到数组的方法
String[] myTargetArray = new String[];
myTargetArray[] = "The";
myTargetArray[] = "quick";
myTargetArray[] = "brown";
myTargetArray[] = "fox";
myTargetArray[] = "jumped";
myTargetArray[] = "over";
myTargetArray[] = "the";
myTargetArray[] = "lazy";
myTargetArray[] = "dog";
ht.Keys.CopyTo(myTargetArray, ); //赋值键到数组中,从第7位起覆盖。
ht.Values.CopyTo(myTargetArray, );//赋值值到数组中,从第7位起覆盖。 // 移除所有元素
ht.Clear();
Console.ReadKey();
}
}
}

Hashtable完整代码

C# Hashtable的更多相关文章

  1. HashSet HashTable 与 TreeSet

    HashSet<T>类 HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集.并集.差集等.集合中包含一组不重复出现且无特性顺序的元素. HashSet& ...

  2. Javascript实现HashTable类

    散列算法可以尽快在数据结构中找出指定的一个值,因为可以通过Hash算法求出值的所在位置,存储和插入的时候都按照Hash算法放到指定位置. <script> function HashTab ...

  3. Java集合专题总结(1):HashMap 和 HashTable 源码学习和面试总结

    2017年的秋招彻底结束了,感觉Java上面的最常见的集合相关的问题就是hash--系列和一些常用并发集合和队列,堆等结合算法一起考察,不完全统计,本人经历:先后百度.唯品会.58同城.新浪微博.趣分 ...

  4. java面试题——HashMap和Hashtable 的区别

    一.HashMap 和Hashtable 的区别 我们先看2个类的定义 public class Hashtable extends Dictionary implements Map, Clonea ...

  5. Map集合及与Collection的区别、HashMap和HashTable的区别、Collections、

    特点:将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值. Map集合和Collection集合的区别 Map集合:成对出现 (情侣)                       ...

  6. HashTable初次体验

    用惯了数组.ArryList,初次接触到HashTable.Dictionary这种字典储存对于我来说简直就是高大上. 1.到底什么是HashTable HashTable就是哈希表,和数组一样,是一 ...

  7. HashMap和 Hashtable的比较

    Hashtable 和 HashMap的比较 1.  HashMap可以接受null(HashMap可以接受为null的键值(key)和值(value), HashTable不可以接受为null的键( ...

  8. hashMap和hashTable的区别

    每日总结,每天进步一点点 hashMap和hashTable的区别 1.父类:hashMap=>AbstractMap hashTable=>Dictionary 2.性能:hashMap ...

  9. SortedList和HashTable

    都是集合类,C#中同属命名空间System.Collections,“用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写:value用于存储对应于key的 ...

  10. Java Hashtable的实现

    先附源码: package java.util; import java.io.*; /** * This class implements a hash table, which maps keys ...

随机推荐

  1. vue_axios请求封装、异常拦截统一处理

    1.前端网络请求封装.异常统一处理 vue中采用axios处理网络请求,避免请求接口重复代码,以及各种网络情况造成的异常情况的判断,采用axios请求封装和异常拦截操作: axios 请求封装 // ...

  2. Android的Databinding-自定义生成类名字

    1. 在xml中,添加class的属性并设置为自定义名字<data class="com.example.CustomBinding"></data>2. ...

  3. vue中使用some删除list中的数据

    在vue中可以使用some方法查找需要删除的所以 this.list.some((item, i) => { if (item.id == id) { this.list.splice(i, 1 ...

  4. MySql之修改操作与进阶

    一:更新特定行 UPDATE tableName SET 列名 = 值,列名 = 值... WHERE 条件; 二:使用子查询更新数据 UPDATE tableName SET 列名 = SELECT ...

  5. C#中Post请求的两种方式发送参数链和Body的

    POST请求 有两种方式 一种是组装key=value这种参数对的方式 一种是直接把一个字符串发送过去 作为body的方式 我们在postman中可以看到 sfdsafd sdfsdfds publi ...

  6. HDU 3277 Marriage Match III(并查集+二分答案+最大流SAP)拆点,经典

    Marriage Match III Time Limit: 10000/4000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. 批处理命令学习笔记——Start命令

    Start 命令 启动另一个窗口运行指定的程序或命令,所有的DOS命令和命令行程序都可以由start命令来调用. 语法:START ["title"] [/Dpath] [/I] ...

  8. Pitch detection algorithm(基音搜索算法)PDA相关链接

    第一:维基百科 http://en.wikipedia.org/wiki/Pitch_estimation 简要系统介绍了基音估计算法的分类和一些链接,论文 第二:http://ws2.bingham ...

  9. 业界常用的和不常用cad快捷键

    AutoCAD 是目前世界各国工程设计人员的首选设计软件,简便易学.精确无误是AutoCAD成功的两个重要原因.AutoCAD提供的命令有很多,绘图时最常用的命令只有其中的百分之二十. 在CAD软件操 ...

  10. URLEncoder 和URLDecoder

    通常在字符串的编码转换上,可以使用这两个类: public static void main(String[] args) { String str = "你好吗?我很好!"; t ...