Fork me on GitHub

《Hashtable(散列表)》--- 集合

Hashtable将添加的元素存放在System.Collections.DictionaryEntry对象里,因此使用foreach或者IEnumerator的Current属性时,都应该将Hashtable中的元素转换为DictionaryEntry对象。可以使用键值作为索引来往问Hashtable中的元素,当检索值时,健再次被散列,并将得到的散列值作为索引来检索值在表中的位置。

   Add方法用来将健/值对添加到Hashtable中,即健被散列,散列值作为值插入表中的位置,用来标识存储位置,Hashtable的健不能为空但是值可以是空引用。

首先演示一下Hashtable的使用:

using System;

 

 

 

 

using System.Collections;

 

namespace HashtableTest

{

    class Test

    {

        public static void Judgevalue(Hashtable table)

        {

            if (table.ContainsKey("Wednesday"))

            {

                Console.WriteLine("table中包含健Wednesday");

            }

            else

            {

                Console.WriteLine("table中不包含健Wednesday");

            }

            if (table.ContainsValue("星期三"))

            {

                Console.WriteLine("table中包含值星期三");

            }

            else

            {

                Console.WriteLine("table中不包含值星期三");

            }

        }

        static void Main(string[] args)

        {

            Hashtable table=new Hashtable();

            table.Add("Sunday","星期天");

            table.Add("Monday""星期一");

            table.Add("Tuesday""星期二");

            table["Wednesday"] = "星期三";

            Console.WriteLine("table中的元素数量为{0}", table.Count);

            Console.WriteLine("Tuesday对应的值为{0}",table["Tuesday"]);

            Console.WriteLine("table中的所有元素包括:");

            IEnumerator e = table.GetEnumerator();

            while (e.MoveNext())

            {

                DictionaryEntry de = (DictionaryEntry)e.Current;

                Console.WriteLine("{0}-{1}",de.Key,de.Value);

            }

            Judgevalue(table);

            Console.WriteLine("删除Wednesday-星期三");

            table.Remove("Wednesday");

            Judgevalue(table);

            table.Add("Thursday","星期四");

            table.Add("Firday""星期五");

            table.Add("Saturday""星期六");

            Console.WriteLine("扩容后:");

            Console.WriteLine("table中的元素数量为{0}", table.Count);

            Console.WriteLine("table中的所有元素包括:");

            e = table.GetEnumerator();

            e.Reset();//return to seat

            while (e.MoveNext())

            {

                DictionaryEntry de = new DictionaryEntry();

                Console.WriteLine("{0}-{1}",de.Key,de.Value);

            }

            Console.ReadKey();

        }

    }

}

使用Add方法添加元素的时候,当添加的元素在表中存在时,Add会引发异常,而使用键值作为索引则只是将旧值换新值。例如:

using System;

using System.Collections;

 

namespace HashtableTEST

{

    class Test

    {

        static void Main()

        {

            Hashtable table = new Hashtable();

            Console.WriteLine("使用Add方法添加:");

            table.Add("Sunday""星期天");

            table.Add("Monday""星期一");

            table.Add("Tuesday""星期二");

            table.Add("Wednesday""星期三");

            table.Add("Thursday""星期四");

            table.Add("Friday""星期五");

            table.Add("Saturday""星期六");

            Console.WriteLine("表中的元素为:");

            IEnumerator e = table.GetEnumerator();

            while (e.MoveNext())

            {

                DictionaryEntry de = (DictionaryEntry)e.Current;

                Console.WriteLine("{0}-{1}",de.Key,de.Value);

            }

            Console.WriteLine();

            try

            {

                table.Add("Wednesday""周三");

                //当添加的元素的健值在表中存在时为引发异常

            }

            catch (Exception ex)

            {

                Console.WriteLine("发生异常"+ex.Message);

            } 

            Console.WriteLine("表中的元素为:");

            e = table.GetEnumerator();

            e.Reset();

            while (e.MoveNext())

            {

                DictionaryEntry de = (DictionaryEntry)e.Current;

                Console.WriteLine("{0}-{1}", de.Key, de.Value);

            }

            Console.WriteLine();

            try

            {

                table["Wednesday"] = "周三";//不会引发异常

            }

            catch(Exception ex)

            {

                Console.WriteLine(ex.Message);

            }

            e = table.GetEnumerator();

            e.Reset();

            while (e.MoveNext())

            {

                DictionaryEntry de = (DictionaryEntry)e.Current;

                Console.WriteLine("{0}-{1}", de.Key, de.Value);

            }

            Console.ReadKey();

        }

    }

}

 

 

posted @ 2011-11-12 22:49  Halower  阅读(242)  评论(0编辑  收藏  举报