热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

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

Hashtable将添加的元素存放在System.Collections.DictionaryEntry对象里,因此使用foreach或者IEnumerator的Current属性时,都

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();

        }

    }

}

 

 


推荐阅读
  • 本文介绍了在实现了System.Collections.Generic.IDictionary接口的泛型字典类中如何使用foreach循环来枚举字典中的键值对。同时还讨论了非泛型字典类和泛型字典类在foreach循环中使用的不同类型,以及使用KeyValuePair类型在foreach循环中枚举泛型字典类的优势。阅读本文可以帮助您更好地理解泛型字典类的使用和性能优化。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • Map主要用于存储健值对,根据键得到值,因此不允许键重复(重复了覆盖了),但允许值重复hashMap是hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区 ... [详细]
  • HashTable与ConcurrentHashMap均可实现HashMap的功能,对外提供了键值对存储的数据结构。但是在内部结构及实现上有何区别,性能上的差异到底在哪里又是如何导致的 ... [详细]
  • 我有一个xml文件,里面的数据想放入自定义类里存入HashTable里面,不知道有没有哪为高手有这方面的例子,希望能解小弟一时之困!谢谢! ... [详细]
  • 一、HashMap1.HashMap概述:HashMap是基于哈希表的Map接口的非同步实现。此实现提供所有可选的映射操作,并允许使用null值和null键。此类不保证映射的顺序,特别是 ... [详细]
  • 要讨论这些常用的默认初始容量和扩容的原因是:当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复 ... [详细]
  • HashMap和Hashtable的区别主要的区别有三点:线程安全性,同步(synchronization),以及速度。(两者都是无序排放)HashMap几乎可以等价于Hashtable,除了Hash ... [详细]
  • 本文讨论了在使用Git进行版本控制时,如何提供类似CVS中自动增加版本号的功能。作者介绍了Git中的其他版本表示方式,如git describe命令,并提供了使用这些表示方式来确定文件更新情况的示例。此外,文章还介绍了启用$Id:$功能的方法,并讨论了一些开发者在使用Git时的需求和使用场景。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了源码分析--ConcurrentHashMap与HashTable(JDK1.8)相关的知识,希望对你有一定的参考价值。  Concu ... [详细]
  • 设置Dictionary得到实体类的字段名称和值publicstaticDictionaryGetProperties ... [详细]
  • 抓取屏幕,分析屏幕上的目标小图片位置,代码犀利,速度很快
    原文:http:www.codeproject.comArticles25025Screen-Scraper-in-Managed-CodeScreenScraperinManaged ... [详细]
  • hashmap线程不安全允许有null的键和值效率高一点、方法不是Synchronize的要提供外同步有containsvalue和containsKey方法HashMap是Java1 ... [详细]
author-avatar
aadsasdass_998_268
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有