1.HashTable

  哈希表(HashTable)表示键/值对的集合。在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key-value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key-value键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键值对,任何非 null 对象都可以用作键或值。

  在哈希表中添加一个key/键值对:HashtableObject.Add(key,); 

  在哈希表中去除某个key/键值对:HashtableObject.Remove(key);

  从哈希表中移除所有元素: HashtableObject.Clear();

  判断哈希表是否包含特定键key: HashtableObject.Contains(key);

  2.HashSet

  HashSet<T>类主要是设计用来做高性能集运算的,例如对两个集合求交集、并集、差集等。集合中包含一组不重复出现且无特性顺序的元素,HashSet拒绝接受重复的对象。

  HashSet<T>的一些特性如下:

  a. HashSet<T>中的值不能重复且没有顺序。

  b. HashSet<T>的容量会按需自动添加。

  3.Dictionary

  Dictionary表示键和值的集合。

  Dictionary<string, string>是一个泛型

  他本身有集合的功能有时候可以把它看成数组

  他的结构是这样的:Dictionary<[key], [value]>

  他的特点是存入对象是需要与[key]值一一对应的存入该泛型

  通过某一个一定的[key]去找到对应的值

  4.HashTable和Dictionary的区别:

  (1).HashTable不支持泛型,而Dictionary支持泛型。

  (2). Hashtable 的元素属于 Object 类型,所以在存储或检索值类型时通常发生装箱和拆箱的操作,所以你可能需要进行一些类型转换的操作,而且对于int,float这些值类型还需要进行装箱等操作,非常耗时。

  (3).单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型. 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。

concurrentDictionary concurrentQueue concurrentStack系列是.NET4.0之后推出的线程安全泛型集合,是对Queue, Stack, Dictionary的线程安全改进版。

using System;
using System.Diagnostics;
using System.Text;
using System.Collections;
using System.Collections.Generic; class Test
{
//Hashtable 与 Dictionary都是采用哈希算法
//后者是泛型,不存在前者常见的装箱拆箱操作
//后者是非线程安全的,前是线程安全的,concurrentDirctionary是线程安全的
//后者参数是泛型类型,使用灵活且类型安全;前者是object类型,类型不安全
//
static void Main(string[] args)
{
Hashtable ht = new Hashtable();
ht.Add(, );
ht[] = ;
// foreach(KeyValuePair<object, object> p in ht)//并不能这样访问,因为hashtable不是泛型的,抛出异常
// {
// Console.WriteLine(p.Key + ", " + p.Value);
// }
Dictionary<int, int> dict = new Dictionary<int, int>();
dict.Add(, );
dict[] = ;//正常 int x = dict[] = ;//正常
//int y = dict[4]; //异常
foreach(KeyValuePair<int, int> p in dict)
{
Console.WriteLine(p.Key + "," + p.Value);
}
int xt;
dict.TryGetValue(, out xt);//这比先判断ContainsKey(5),再dict[5]效率要高,省去了许多遍历
Console.WriteLine(xt);
} }

hashset hastable dictionary concurrentdictionary区别的更多相关文章

  1. HashTable、HashSet和Dictionary的区别

    今天又去面试了,结果依然很悲催,平时太过于关注表面上的东西,有些实质却不太清楚,遇到HashTable和Dictionary相关的知识,记录下来,希望对后来人有所帮助,以及对自己以后复习可以参考. 1 ...

  2. HashTable、HashSet和Dictionary的区别(转载)

    1.HashTable哈希表(HashTable)表示键/值对的集合.在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类 ...

  3. C#高级应用之------HashTable、HashSet和Dictionary的区别(转)

    原文url:http://www.cnblogs.com/akwwl/p/3680376.html 今天又去面试了,结果依然很悲催,平时太过于关注表面上的东西,有些实质却不太清楚,遇到HashTabl ...

  4. C#中的HashSet, HashTable, Dictionary的区别【转】

    HashSet和Python中的Set差不多,都是为逻辑运算准备的,HashSet不允许数据有重复,且存入的时单值不是键值对. HashTable和Dictionary差不多,但是他们的实现方式时不同 ...

  5. HashTable,HashSet与Dictionary

    1.HashTable 哈希表(HashTable)表示键/值对的集合.在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现 ...

  6. HashSet和HashMap的区别

    HashSet和HashMap的区别.Java的HashSet类是由哈希表支持.它不保证 set 的迭代顺序:特别是它不保证该顺序恒久不变.此类允许使用 null 元素.HashSet类为基本操作提供 ...

  7. HashSet与HashMap的区别

    本文由 ImportNew - 唐小娟 翻译自 Javarevisited.欢迎加入翻译小组.转载请见文末要求. HashMap和HashSet的区别是Java面试中最常被问到的问题.如果没有涉及到C ...

  8. Hashtable,HashMap,Dictionary的区别

    Hashtable和HashMap的区别:1.Hashtable是基于Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现,c#中无HashMap2.Hashtable ...

  9. hashset和treeset的区别

    hashset 和 treeset的区别 hashset 和 treeset的区别 1.TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值. 2.HashSet ...

随机推荐

  1. Zend Studio 12 安装及破解

    安装: 1.下载最新版本Zend Studio:http://downloads.zend.com/studio-eclipse/12.0.0/ZendStudio-12.0.0-win32.win3 ...

  2. Android进程管理及静态变量垃圾回收

    1.Android静态变量的生命周期 静态变量的生命周期遵守Java的设计.我们知道静态变量是在类被load的时候分配内存的,并且存在于方法 区.当类被卸载的时候,静态变量被销毁. 在PC机的客户端程 ...

  3. MySql链接字符串 各种程序连接大合集(包括asp.net,c#,等等)

    一.MySQL Connector/ODBC 2.50 (MyODBC 2.50)连接方式 1.本地数据库连接Driver={MySQL};Server=localhost;Option=16834; ...

  4. Asp.net中实现同一用户名不能同时登录(单点登录)

    Web 项目中经常遇到的问题就是同一用户名多次登录的问题,相应的解决办法也很多,总结起来不外乎这几种解决办法: 将登录后的用户名放到数据库表中: 登录后的用户名放到Session中: 登录后的用户名放 ...

  5. 【转发】NPAPI学习(Firefox和Chrome扩展开发 )

    NPAPI学习(Firefox和Chrome扩展开发 ) 2011-11-08 14:41:02 by [6yang], 1172 visits, 收藏 | 返回 Firefox和Chrome扩展开发 ...

  6. 从拟物化到扁平,再到Material Design

    Google I/O 2014提出Material Design,这段时间听到不少关于Material Design的解读,至此Google已经定位了自己的设计语言,我个人看来就是Android和iO ...

  7. JavaScript(一)——简介(简单介绍)

    1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司(已被Oracle收购了),J ...

  8. TSQL--临时表和表变量

    1. 临时表适用数据量较大的情况,因为临时表可以建立索引 2. 表变量适用于数据较小的情况,表变量只能在定义时创建约束(PRIMARY KEY/UNIQUE)从而间接建立索引 3. 临时表是事务性的, ...

  9. java 的常用设计模式--大话设计模式

    设计模式:一个程序员对设计模式的理解:“不懂”为什么要把很简单的东西搞得那么复杂.后来随着软件开发经验的增加才开始明白我所看到的“复杂”恰恰就是设计模式的精髓所在,我所理解的“简单”就是一把钥匙开一把 ...

  10. java:comp/env/jdbc/ 的两种配置方法

    1. 在 META-INF 下建立文件: context.xml <?xml version="1.0" encoding="UTF-8"?> &l ...