1、添加引用 using System.Collections;

2、创建并添加数据

             Hashtable hs = new Hashtable();
hs.Add("Name1", "lwj");
hs.Add("Name2", "wyp");
hs.Add("Name3", "zwl");
hs.Add("Name4", "zyc");
hs.Add("Name8", "wyw");
hs.Add("Name5", "wyw");

3、遍历哈希表中的 值Value

 Console.WriteLine("---------遍历哈希表中的值----------");
////返回循环访问 System.Collections.Hashtable 的 System.Collections.IDictionaryEnumerator。
IDictionaryEnumerator emu = hs.GetEnumerator(); //// 遍历哈希表所有的键,读出相应的值
while (emu.MoveNext()) //如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
{
string str = emu.Value.ToString();
Console.WriteLine(str);
}

4、遍历哈希表

 Console.WriteLine("-----------遍历哈希表-------------");
foreach (DictionaryEntry de in hs)
{
Console.WriteLine("key = {0}; Value = {1}", de.Key, de.Value);
}

5、对HashTable排序之后输出,按Key排序

 Console.WriteLine("-------哈希表按Key排序之后--------");
////哈希表排序, 按Key排序
ArrayList alist = new ArrayList(hs.Keys);
alist.Sort();
foreach (string obj in alist) // //遍历alist
{
Console.WriteLine("{0, -15} {1, -15}", obj, hs[obj]); //{0, -15} PadLeft
}

6、转换成List输出

 Console.WriteLine("------------使用List之后-----------");
List<string> list = new List<string>();
foreach (DictionaryEntry de in hs)
{
list.Add(de.Value.ToString());
}
foreach (string obj in list)
{
Console.WriteLine(obj);//i就是下标
}

7、转换成Dictionary<object, object>之后进行遍历输出

 Console.WriteLine("---------使用Dictionary之后--------");
Dictionary<object, object> myDic = new Dictionary<object, object>();
foreach (DictionaryEntry de in hs) //循环遍历HashTable 将其添加至 myDic
{
myDic.Add(de.Key, de.Value); // 这俩都是 object型的
}
//循环遍历输出 myDic
foreach (object obj in myDic)
{
Console.WriteLine(obj.ToString()); //[Name,wyw] 输出是这样的格式
}
//采用另一种输出
Console.WriteLine("--------Dictionary键值对输---------");
foreach (KeyValuePair<object, object> kvp in myDic)
{
Console.WriteLine("Key={0}, Value={1}", kvp.Key, kvp.Value); //获取键值对后,自定义输出
}

8、克隆HashTable 到另一HashTable并 遍历输出:

 //此处写 添加 删除一些数据,以便验证
1 Console.WriteLine("------添加移除之后,遍历哈希表-----");
hs["Name0"] = "The First";
hs.Remove("Name8");
hs.Add("Name6", "add6");
foreach (DictionaryEntry de in hs)
{
Console.WriteLine("Key: {0, 15} Value{1, 15}", de.Key, de.Value);
} Console.WriteLine("--------克隆哈希表到hs2之后--------");
Hashtable hs2 = (Hashtable)hs.Clone(); //public virtual object Clone(); 创建 System.Collections.Hashtable 的浅表副本。
foreach (DictionaryEntry de in hs2)
{
Console.WriteLine("Key: {0, 15} Value{1, 15}", de.Key, de.Value);
} Console.WriteLine("----------哈希表清空之后-----------");
hs.Clear();
foreach (DictionaryEntry de in hs) //哈希表存在,但里面没数据,因此下列不执行
{
Console.WriteLine("Key: {0, 15} Value{1, 15}", de.Key, de.Value);
}

输出结果:

全部源代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections; namespace HashTable
{
class Program
{
static void Main(string[] args)
{
Hashtable hs = new Hashtable();
hs.Add("Name1", "lwj");
hs.Add("Name2", "wyp");
hs.Add("Name3", "zwl");
hs.Add("Name4", "zyc");
hs.Add("Name8", "wyw");
hs.Add("Name5", "wyw"); Console.WriteLine("-----------遍历哈希表-------------");
foreach (DictionaryEntry de in hs)
{
Console.WriteLine("key = {0}; Value = {1}", de.Key, de.Value);
} Console.WriteLine("---------遍历哈希表中的值----------");
////返回循环访问 System.Collections.Hashtable 的 System.Collections.IDictionaryEnumerator。
IDictionaryEnumerator emu = hs.GetEnumerator(); //// 遍历哈希表所有的键,读出相应的值
while (emu.MoveNext()) //如果枚举数成功地推进到下一个元素,则为 true;如果枚举数越过集合的结尾,则为 false。
{
string str = emu.Value.ToString();
Console.WriteLine(str);
} Console.WriteLine("-------哈希表按Key排序之后--------");
////哈希表排序, 按Key排序
ArrayList alist = new ArrayList(hs.Keys);
alist.Sort();
foreach (string obj in alist) // //遍历alist
{
Console.WriteLine("{0, -15} {1, -15}", obj, hs[obj]); //{0, -15} PadLeft
} Console.WriteLine("------------使用List之后-----------");
List<string> list = new List<string>();
foreach (DictionaryEntry de in hs)
{
list.Add(de.Value.ToString());
}
foreach (string obj in list)
{
Console.WriteLine(obj);//i就是下标
} Console.WriteLine("---------使用Dictionary之后--------");
Dictionary<object, object> myDic = new Dictionary<object, object>();
foreach (DictionaryEntry de in hs) //循环遍历HashTable 将其添加至 myDic
{
myDic.Add(de.Key, de.Value); // 这俩都是 object型的
}
//循环遍历输出 myDic
foreach (object obj in myDic)
{
Console.WriteLine(obj.ToString()); //[Name,wyw] 输出是这样的格式
}
//采用另一种输出
Console.WriteLine("--------Dictionary键值对输---------");
foreach (KeyValuePair<object, object> kvp in myDic)
{
Console.WriteLine("Key={0}, Value={1}", kvp.Key, kvp.Value); //获取键值对后,自定义输出
} Console.WriteLine("------添加移除之后,遍历哈希表-----");
hs["Name0"] = "The First";
hs.Remove("Name8");
hs.Add("Name6", "add6");
foreach (DictionaryEntry de in hs)
{
Console.WriteLine("Key: {0, 15} Value{1, 15}", de.Key, de.Value);
} Console.WriteLine("--------克隆哈希表到hs2之后--------");
Hashtable hs2 = (Hashtable)hs.Clone(); //public virtual object Clone(); 创建 System.Collections.Hashtable 的浅表副本。
foreach (DictionaryEntry de in hs2)
{
Console.WriteLine("Key: {0, 15} Value{1, 15}", de.Key, de.Value);
} Console.WriteLine("----------哈希表清空之后-----------");
hs.Clear();
foreach (DictionaryEntry de in hs) //哈希表存在,但里面没数据,因此下列不执行
{
Console.WriteLine("Key: {0, 15} Value{1, 15}", de.Key, de.Value);
} Console.ReadKey();
}
}
}

笔者在接触到了HashTable之后,上网搜索了一下具体用法,然后笔者就试着去联系以前 接触过的List、Diationary等,

试着将他们相互转换。以上仅供参考,方案并非最佳,希望能帮助大家!谢谢阅读与指正。

HashTable、List、ArrayList的经典使用和相互转换的更多相关文章

  1. hashmap和hashtable,arraylist和vector的区别

    hashmap线程不安全,hashtable线程安全 hashmap允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同. ...

  2. HashMap、HashTable、ArrayList、LinkedList、Vector区别

    HashTable和HashMap区别 ①继承不同. public class Hashtable extends Dictionary implements Map public class Has ...

  3. Vector & ArrayList Hashtable & HashMap ArrayList & LinkedList

    1. Vector & ArrayList 1)  Vector的方法都是同步的(Synchronized),是线程安全的(thread-safe),而ArrayList的方法不是,由于线程的 ...

  4. List、dictionary、hashtable、ArrayList集合

    集合的引用命名空间在 system.Collections下 1.为什么引入集合 因为数组长度是固定的,为了建立一个动态的"数组",所以引入了集合. 2.为什么引入ArrayLis ...

  5. ArrayList、HashTable、List、Dictionary的演化及如何选择使用

    在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你 ...

  6. 利用ArrayList对Hashtable其进行排序

    前言: 最近在使用Hashtable的时候发现一个问题:就是当你对Hashtable进行遍历的时候整个输出结果是毫无顺序的, 上网查了一下说是Hashtable有自己内部的排序机制,如果要自定义排序的 ...

  7. ArrayList、HashSet、HashTable、List、Dictionary的区别

    在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你 ...

  8. 数组、ArrayList、HashTable

    相同点:都可以存储一组数据 不同点: 1)数组,必须要先分配空间,存储数据固定 2)ArrayList,存储数据可以自由扩展 3)HashTable与ArrayList一样,但是它是有意义的,键值对形 ...

  9. C# ArrayList、HashSet、HashTable、List、Dictionary的区别

    在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你 ...

随机推荐

  1. nginx: [emerg] "proxy_cache_path" directive is not allowed here in /usr/local/nginx/conf/nginx.conf:43

    1.它只能使用于http{  }部分,把proxy_cache_path放置于http部分即可解决此问题.注意图示的上下文

  2. C语言:通过函数指针来完成两个数的加减乘除(函数指针当做参数使用)

    // //  main.c //  Function_pointer // //  Created by mac on 15/8/2. //  Copyright (c) 2015年. All rig ...

  3. Objective-C:OC内部可变对象和不可变对象的深(复制)拷贝问题思考:

    OC内部:可变对象和不可变对象的深(复制)拷贝问题思考:   不可变对象:  例如NSString对象,因为NSString对象是常量字符串,所以,不可以更改其内容,但是可以修改指向该字符串的指针指向 ...

  4. C++代码统计工具

    自己前几天写的C++代码统计工具. http://pan.baidu.com/s/17SnnH

  5. C/C++中printf/cout 计算顺序与缓冲区问题

    1.printf/cout在同一个语句中都是从右向左计算的. 看如下的代码: #include <stdio.h> int main() { ; printf("%d %d&qu ...

  6. Sublime Text自定义插入当前时间的插件

    很奇怪为什么强大的Sublime编辑器为什么没有添加当前时间的快捷键,不过还好Sublime可以通过自定义插件的方式来实现任何你想要的效果   1. 创建插件:   Tools → New Plugi ...

  7. QQ2010如何开启透明效果皮肤

    QQ2010可在WIN7下实现皮肤透明效果. 腾讯已于近日发布了QQ2010的BETA版本,经笔者试验,可在WIN7下实现皮肤透明化效果. 设置如下: 1.先打开QQ皮肤控制面板,如下: 2.然后任选 ...

  8. 自己的一个js库

    https://github.com/sqqihao/nono_framework.git 持续更新,慢慢写着,这样才能成长

  9. 把thinkphp项目拷贝到其他电脑上报错

    提示 include(***\ThinkPHP\Library/Think/Log.class.php): failed to open stream 把Application\Runtime文件夹里 ...

  10. ZH奶酪:纯CSS自定义Html中Checkbox复选框样式

    原文链接:http://www.lrxin.com/archives-683.html 首先看下效果: 点击演示地址查看实例. 首先,需要添加一段CSS隐藏所有的Checkbox复选框,之后我们会改变 ...