Dictionary入门
Dictionary入门
(1).Dictionary支持泛型,速度快,类型安全,不用担心装箱与拆箱带来的性能损耗,Hashtable不支持泛型;
(2).Dictionary <TKey,TValue>一出Hashtable就被淘汰了...你说哪个性能高?
(3).Hashtable里存的对象全部是object类型,所有对象存进去都被转成object类型,读取出来每次都需要转换类型,Hashtable对存入的类型没有限制,因此在读取转换类型时容易出错;
Dictionary只能存入定义时指定的类型,而且不像Hashtable会把类型转换成object,存取起来比前者方便,效率更高,因为不需要转换类型,所以不会出现Hashtable里的转换类型错误而报出程序异常;
(4).由于 Hashtable 和 Dictionary 同时存在, 在使用场景上必然存在选择性,并不任何时刻都能相互替代。
[1] 单线程程序中推荐使用 Dictionary, 有泛型优势, 且读取速度较快, 容量利用更充分。
[2] 多线程程序中推荐使用 Hashtable, 默认的 Hashtable 允许单线程写入, 多线程读取, 对 Hashtable 进一步调用 Synchronized() 方法可以获得完全线程安全的类型。 而 Dictionary 非线程安全, 必须人为使用 lock 语句进行保护, 效率大减。
[3] Dictionary 有按插入顺序排列数据的特性 (注: 但当调用 Remove() 删除过节点后顺序被打乱), 因此在需要体现顺序的情境中使用 Dictionary 能获得一定方便。
public static void RunSnippet()
{
System.Collections.Generic.Dictionary<PointItem,int> dicPoint=new System.Collections.Generic.Dictionary<PointItem,int>();
dicPoint.Add(PointItem.UNewAccount,50);
dicPoint.Add(PointItem.ULogin,20);
//dicPoint.Add(PointItem.ULogin,88);//异常: System.ArgumentException: 已添加了具有相同键的项。
//修改值或添加值(不存在则添加)
dicPoint[PointItem.ULogin]=88;
dicPoint[PointItem.QCommentAnswer]=99;
//用KeyValuePair遍历
foreach(System.Collections.Generic.KeyValuePair<PointItem,int> ii in dicPoint)
Console.WriteLine(string.Format("{0},{1}",ii.Key,ii.Value));
Console.WriteLine("--------------------");
//ContainsKey
Console.WriteLine(dicPoint.ContainsKey(PointItem.QPutKnow));//Flase
//Console.WriteLine(dicPoint[PointItem.QPutKnow]);//异常:System.Collections.Generic.KeyNotFoundException: 给定关键字不在字典中。
//ContainsKey
if(dicPoint.ContainsKey(PointItem.QPutKnow))
Console.WriteLine(dicPoint[PointItem.QPutKnow]);
//TryGetValue
int iValue=0;
if(dicPoint.TryGetValue(PointItem.QDeleteQuestion,out iValue))
Console.WriteLine(iValue);
else
Console.WriteLine("PointItem.QDeleteQuestion 没有值");
//ValueCollection
System.Collections.Generic.Dictionary<PointItem,int>.ValueCollection valueColl=dicPoint.Values;
foreach(int i in valueColl)
Console.Write(string.Format("{0}/t",i));
Console.WriteLine();
//KeyCollection
System.Collections.Generic.Dictionary<PointItem,int>.KeyCollection keyColl=dicPoint.Keys;
foreach(PointItem pi in keyColl)
Console.Write(string.Format("{0}/t",pi));
Console.WriteLine();
//Remove
bool removeSuccess = dicPoint.Remove(PointItem.QPutQuestion);//不存在则False
Console.WriteLine(removeSuccess);
}
public enum PointItem
{
UNewAccount,
ULogin,
QPutQuestion,
QAcceptAnswer,
QCommentAnswer,
AAnswer,
ABestAnswer,
QPutKnow,
ACommentKnow,
QQuestionOver,
QDeleteQuestion
};
Dictionary入门相关推荐
- vim 高级应用 原文地址 http://www.2maomao.com/blog/wp-content/uploads/vim_tips.txt
最佳vim技巧 ---------------------------------------- # 信息来源 ---------------------------------------- www ...
- 7-Python3从入门到实战—基础之数据类型(字典-Dictionary)
Python从入门到实战系列--目录 字典的定义 字典是另一种可变容器模型,且可存储任意类型对象:使用键-值(key-value)存储,具有极快的查找速度: 字典的每个键值(key=>value ...
- CS入门学习笔记6-MIT 6.00.1x-tuple,list,dictionary
Lecture 6 对象 截止目前,已学习过的算法: Exhaustive enumeration Guess and check Bisection Divide and conquer 学习过的s ...
- SWIFT入门 Dictionary
var menu:[String] = ["1","2","3"] print(menu.count) print(menu[0]) men ...
- 算法竞赛入门经典(第二版) | 例题5-3 安迪的第一个字典 (紫书牛啤!)(UVa10815,Andy's First Dictionary)
概述: 输入一个文本,找出所有不同的单词,按字典序排序,去重后,输出,单词不分大小写. 储备知识: 1.sstring头文件的用法→sstring头文件函数详解 2.cctype头文件的用法→ccty ...
- Python 3 《dictionary》入门练习
#!/usr/bin/env python # -*- coding:utf-8 -*- # author: Christal date: 2021/11/19# --------简单的字典创建和打印 ...
- python中字典是什么类型_Python入门-Python中的基本数据类型-dictionary(字典)
字典是一种映射类型,字典用"{ }"标识,它是一个无序的"键(key) : 值(value)"对集合."键(key)"必须使用不可变类型,如 ...
- Farseer.net轻量级ORM开源框架 V1.x 入门篇:新版本说明
导航 目 录:Farseer.net轻量级ORM开源框架 目录 上一篇:没有了 下一篇:Farseer.net轻量级ORM开源框架 V1.x 入门篇:数据库配置 前言 V1.x版本终于到来了.本次 ...
- Dictionary作为数据源绑定,调用c++库中返回为BYTE*的函数,listView项排序
最近在做一个电子档案管理的项目.现在还处于初期,只是做一个简单demo拿去跟客户演示.至于最后谈不谈得下来,到底做不做,反正我是不看好,但没因为这样就马马虎虎.草草了事.这个项目算是b/s加c/s混合 ...
最新文章
- linux svn命令
- flask_入门教程之一
- xss原理、攻击方式与防御
- 支持nvme的linux_Linux nvme驱动初探
- 鸿蒙adb调试权限,真机ro.debuggable全局调试权限修改为1(Nexus 6为例)
- Python Imaging Library: ImageColor Module(图像颜色模块)
- java导出excel超出65536条处理
- iBATIS的自定义类型处理器TypeHandlerCallback解决乱码
- C# 获取当前程序集版本号,获取当前编译时间
- 【转载】robocopy的用法
- 【后台技术】异步编程指北,问题和重点
- [译]连接池和 Timeout expired异常
- 我的App-帝都地铁
- 55个美丽而独特的网站页眉设计欣赏
- Redisson3.10 RCacheMap踩坑记录
- 大学生金融欺诈现状出炉 微博借钱提示四大典型骗局
- 2022茶艺师(中级)考试题模拟考试题库及答案
- 友豆火山CPG插件开发001-简介初识
- Windows系统安全登录日志分析工具logonTracer汉化修正版
- 代码随想录训练营day43