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. SQL_求集合中每天最大时间记录的总和

    --问题求 集合中每天最大时间的总和 表中的数据 列: 用户 分数 时间 A 2 2014-01-01 01:00:00 A 2 2014-01-01 02:00:00 A 2 2014-01-01 ...

  2. css3 实现圆角边框的border-radius属性和实现阴影效果的box-shadow属性

    首先我要介绍的是border-radius属性,它的作用是实现圆角边框,其中border-radius:20px;表示,一个’体‘四个角都圆滑20px,其值如果为100px那么圆角度则为最高,如果是正 ...

  3. 【c语言】使用gumbo解析HTML

    之前使用过PHP的Simple HTML DOM简单地解析HTML但PHP终非我所熟悉的语言,虽然我并不对语言抱有绝对的执着= =(什么你不相信,好吧,不管你信不信,反正我是信了= =).虽然可以简单 ...

  4. fpga状态机详解

    什么是状态机:状态机通过不同的状态迁移来完成特定的逻辑操作 状态机的分类:Moore型状态机和Mealy型状态机 Moore型:状态机的变化只与当前的状态有关 Mealy型:状态机的变化不仅与当前的状 ...

  5. 理解js中的new

    new 操作符 在有上面的基础概念的介绍之后,在加上new操作符,我们就能完成传统面向对象的class + new的方式创建对象,在Javascript中,我们将这类方式成为Pseudoclassic ...

  6. 请教如何改善C#中socket通信机客户端程序的健壮性

    我是做Socket的新手,最近做了一个Socket客户端程序,连接Server的时候,如果server存在,并且允许连接的话,程序无错,正常执行:但是如果Server不存在,或者拒绝连接,程序就会卡住 ...

  7. 你对position的了解有多少?

    此文根据Steven Bradley的<How Well Do You Understand CSS Positioning?>所译,整个译文带有我自己的理解与思想,如果译得不好或不对之处 ...

  8. 交叉编译git

    git依赖openssl.zlib. 首先编译openssl ./Configure linux-armv4 shared 修改Makefile,CC.RANLIB.MAKEDEPPROG为对应的交叉 ...

  9. (转)Unity3D新手引导开发手记

    转自:http://www.cnblogs.com/ybgame/p/3844315.html 最近开始接手新手引导的开发,记录下这块相关的心得 首先客户端是Unity,在接手前,前面的同学已经初步完 ...

  10. MyEclipse中使用Junit插件进行单元测试

    http://wenku.baidu.com/view/ec904a116bd97f192279e9a6.html