HashTable、List、ArrayList的经典使用和相互转换

1、添加引用 using System.Collections;

2、创建并添加数据

1             Hashtable hs = new Hashtable();
2             hs.Add("Name1", "lwj");
3             hs.Add("Name2", "wyp");
4             hs.Add("Name3", "zwl");
5             hs.Add("Name4", "zyc");
6             hs.Add("Name8", "wyw");
7             hs.Add("Name5", "wyw");

3、遍历哈希表中的 值Value

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

4、遍历哈希表

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

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

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

6、转换成List输出

 1 Console.WriteLine("------------使用List之后-----------");
 2             List<string> list = new List<string>();
 3             foreach (DictionaryEntry de in hs)
 4             {
 5                 list.Add(de.Value.ToString());
 6             }
 7             foreach (string obj in list)
 8             {
 9                 Console.WriteLine(obj);//i就是下标
10             }

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

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

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

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

输出结果:

全部源代码:

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等,

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

时间: 2024-12-19 21:26:27

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

(转)多线程下:Vector、Hashtable、ArrayList、LinkedList、HashMap 性能特征

最近在研究关于多线程环境下如何提升性能,在程序中执行最多的是“查询”,但同时也要维护数据的“添加”和“删除” 目前在 Hashtable 和 HashMap 中选择. 看了jdk文档,我们知道 Hashtable是同步的,而HashMap是不同步的. 所以一开始的时候,我采用的是 Hashtable,因为程序中80%的时间是在进行“查询”,所以为了提升速度,我改为 HashMap,经过几个小时的上线测试发现一个问题: 因为我在另一个单独的线程中每隔30秒对HashMap进行数据的维护(删除数据)

hashmap和hashtable,arraylist和vector的区别

hashmap线程不安全,hashtable线程安全 hashmap允许使用 null 值和 null 键.(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同.)此类不保证映射的顺序,特别是它不保证该顺序恒久不变. hashtable任何非 null 对象都可以用作键或值.为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和 equals 方法. arraylist线程不安全,vector线程安全 arraylist和vect

HashMap、HashTable、ArrayList、LinkedList、Vector区别

HashTable和HashMap区别 ①继承不同. public class Hashtable extends Dictionary implements Map public class HashMap extends AbstractMap implements Map ② Hashtable 中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的.在多线程并发的环境下,可以直接使用Hashtable,但是要使用HashMap的话就要自己增加同步处理了. ③ Hashtable

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

在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你可以将任意多的数据Add到ArrayList里面.其内部维护的数组,当长度不足时,会自动扩容为原来的两倍. 但是ArrayList也有一个缺点,就是存入ArrayList里面的数据都是Object类型的,所以如果将值类型存入和取出的时候会发生装箱.拆箱操作(就是值类型与引用类型之间的转换),这个会影响程序性能

C# ArrayList、HashSet、HashTable、List、Dictionary的区别(转)

转自:https://blog.csdn.net/wildlifeking/article/details/58605587 在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你可以将任意多的数据Add到ArrayList里面.其内部维护的数组,当长度不足时,会自动扩容为原来的两倍. 但是ArrayList也有一个缺点,就是存入ArrayList里面的数据都是

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

在C#中,数组由于是固定长度的,所以常常不能满足我们开发的需求. 由于这种限制不方便,所以出现了ArrayList. ArrayList.List<T> ArrayList是可变长数组,你可以将任意多的数据Add到ArrayList里面.其内部维护的数组,当长度不足时,会自动扩容为原来的两倍. 但是ArrayList也有一个缺点,就是存入ArrayList里面的数据都是Object类型的,所以如果将值类型存入和取出的时候会发生装箱.拆箱操作(就是值类型与引用类型之间的转换),这个会影响程序性能

C#基础[10] ArrayList集合(二)【详细介绍】

1.什么是ArrayList ArrayList就是传说中的动态数组,用MSDN中的说法,就是Array的复杂版本,它提供了如下一些好处: 动态的增加和减少元素 实现了ICollection和IList接口 灵活的设置数组的大小 2.如何使用ArrayList 最简单的例子: ArrayList List = new ArrayList(); for( int i=0;i<10;i++ ) //给数组增加10个Int元素 List.Add(i); //..程序做一些处理 List.RemoveA

Hashtable和Dictionary&lt;T,K&gt;的使用

由于Hashtable内部自带有排序(根据Key的HashCode来进行的),因此有时在使用Hashtable时就会造成数据顺序不可控的情况,有两种办法可以解决, 测试代码: Dictionary<string,string> ht=new Dictionary<string, string>();        ht.Add("http://www.sina.com.cn","");        ht.Add("http://w

List ArrayList LinkedList vector简介与区别

ArrayList,LinkedList,Vestor这三个类都实现了java.util.List接口,但它们有各自不同的特性,主要如下: ArrayList:底层用数组实现的List 特点:查询效率高,增删效率低 轻量级 线程不安全 LinkedList:底层用双向循环链表 实现的List 特点:查询效率低,增删效率高 Vector: 底层用数组实现List接口的另一个类 特点:重量级,占据更多的系统开销 线程安全 一.同步性 ArrayList,LinkedList是不同步的,而Vestor