C#泛型-泛型集合DictionaryK,V
在System.Collections.Generic命名空间中,与ArrayList相对应的泛型集合是List<T>,与 HashTable相对应的泛型集合是Dictionary<K,V>,其存储数据的方式与哈希表相似,通过键/值来保存元素,并具有泛型的 全部特征,编译时检查类型约束,读取时无须类型转换。
电话本存储的例子中,使用Dictionary<K,V>来存储电话本信息,代码如下:
Dictionary<string,TelNote> ht=new Dictionary<string,TelNote>();
在Dictionary<K,V>声明中,“<string,TelNote>”中的string表示集合中Key的类型,TelNote表示Value的类型,定义Dictionary<K,V>泛型集合中的方法如下:
Dictionary<K,V> students=new Dictionary<K,V>();
其中“K”为占位符,具体定义时用存储键“Key”的数据类型代替,“V”也是占位符,用元素的值“Value”的数据类型代替,这样就在定义该集合时,声明了存储元素的键和值的数据类型,保证了类型的安全性。
Dictionary<K,V>中元素的操作方法与HashTable相似,添加元素,获取元素,删除元素,遍历集合元素的方法基本相同。
Dictionary<K,V>和HashTable的区别
Dictionary<K,V>和HashTable的相同点:添加元素,删除元素,通过键访问值的方法相同。
Dictionary<K,V>和HashTable的不同点:
Dictionary<K,V>对添加的元素具有类型约束,HashTable可添加任意类型的元素。
Dictionary<K,V>不需要装箱、拆箱操作,HashTable添加时装箱,读取时拆箱。
在Dictionary<K,V>集合中,除了通过键获取值的方法外,还有一种TryGetValue(key)方法,可以通过键获取值,该 方法返回值为布尔型,如果存在和键相对应的值,则返回true,否则返回false。避免了因获取不到相应值发生的异常。
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
//创建Dictionary<K,V>,然后添加元素
Dictionary < string, string > film = new Dictionary < string, string > ();
film.Add("韦小宝", "鹿鼎记");
film.Add("陆小凤", "陆小凤传奇");
film.Add("张无忌", "倚天屠龙记");
film.Add("杨过", "神雕侠侣");
film.Add("令狐冲", "笑傲江湖");
Console.WriteLine("集合现在的元素个数为{0}", film.Count);
film.Remove("杨过");
//遍历集合
Console.WriteLine("武侠电影的主角及电影名");
Console.WriteLine("\t主角\t电影");
foreach (KeyValuePair < string, string > kvp in film)
{
Console.WriteLine("\t{0}\t{1}", kvp.Key, kvp.Value);
}
//检查元素是否存在,如不存在,添加
if (!film.ContainsKey("段誉"))
{
film.Add("段誉", "天龙八部");
}
//获取键的集合
Dictionary < string, string > .KeyCollection keys = film.Keys;
//遍历键的集合
Console.WriteLine("受欢迎的武侠片中主角名");
foreach (string str in keys)
{
Console.WriteLine(str);
}
Dictionary < string, string > .ValueCollection values = film.Values;
//遍历值的集合
Console.WriteLine("最受欢迎的武侠片");
foreach (string strfilm in values)
{
Console.WriteLine(strfilm);
}
//遍历元素的另一种方法
Console.WriteLine("和哈希表相同的遍历元素方法");
foreach (string strname in film.Values)
{
Console.WriteLine(strname);
}
//获取键对应的值
string myfilm = film["令狐冲"];
Console.WriteLine("主角为令狐冲的电影名{0}", myfilm);
//获取键对应值的TryGetValue方法
string objfilm = string.Empty;
if (film.TryGetValue("段誉", out objfilm))
{
Console.WriteLine("主角为段誉的电影是{0}", objfilm);
}
else
Console.WriteLine("没有主角为段誉的电影");
Console.ReadKey();
}
}
代码创建了一个Dictionary<K,V>集合,键和值的数据类型是string类型,后边代码的元素添加,删除都和哈希表处理方法相 同,遍历元素时不需要进行数据类型强制转换。Dictionary<K,V>通过键取值的TryGetValue方法,此方法包括两个参数, 一个是要查询的键,另一个是获取的值,注意值前面使用out关键字。
注意:使用TryGetValue方法时,参数一定要使用out关键字,否则编译失败。
http://hi.baidu.com/panjundao/blog/item/eb38e70c2ed558e1ab6457b1.html
C#泛型-泛型集合DictionaryK,V相关推荐
- mysql结果集键值对_键值对集合DictionaryK,V根据索引提取数据
java stopwatch 功能 C#中有一个stopwatch的功能,主要是用来监测程序执行时间的.java之前一直都在用如下方式完成: public static void main(Strin ...
- C# 篇基础知识11——泛型和集合
.NET提供了一级功能强大的集合类,实现了多种不同类型的集合,可以根据实际用途选择恰当的集合类型. 除了数组 Array 类定义在System 命名空间中外,其他的集合类都定义在System.Coll ...
- sqlite工具类 java_Java之泛型、集合工具类
集合工具类 在我们讲完常用的基本集合后,我们就要介绍下位于java.util包下的collections类,注意:我们之前的collection是集合的接口,而collections是一个类.coll ...
- .net core精彩实例分享 -- 泛型和集合
文章目录 介绍 具体案例 限制泛型参数只能使用值类型 泛型参数的输入和输出 将抽象类作为类型约束 使用Span提升处理字符串的性能 多个Task同时操作ConcurrenBag集合 跨线程访问Bloc ...
- SCJP笔记_章七_泛型与集合
第七章 泛型与集合 7.1 重写hashCode()和equals()方法 考试目标6.2 区分hashCode()和equals()方法的正确设计和错误设计,并解释 == 和equals()方法的不 ...
- 01.08学习Java的day18【泛型与集合】
day18[泛型] 主要内容 泛型 Collection集合 学习目标 能够使用泛型定义类.接口.方法 能够理解泛型上限 能够阐述泛型通配符的作用 能够识别通配符的上下限 能够熟练使用Collecti ...
- (10)Java泛型-Map集合-集合框架工具类-可变参数-静态导入
-- 部分1.5新特性Java泛型-Map集合-集合框架工具类 泛型 概述: JDK1.5版本以后出现的新特性,用于解决安全问题,是一个类型安全机制. 对于泛型可以这样理解: 没有使用泛型时,只要是对 ...
- Java实用教程笔记 泛型与集合框架
泛型与集合框架 Generics 链表 LinkedList < E >泛型类 接口回调 常用方法 LinkedList< E >泛型类实现Link< E >泛型接 ...
- Java集合之Collection集合、泛型 【集合综合案例:赌神、赌侠、赌神斗地主】
第一章. Collection集合 1.1 集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. ...
最新文章
- android5.1内核版本,Android-x86现已基于5.1.1 Lollipop:支持UEFI和64位内核
- linux shell 使用代理 proxychains 简介
- javascript 函数声明与函数表达式的区别
- 2.羽翼sqlmap学习笔记之MySQL注入
- utf8 and unicode
- c++编码风格指南_带回家的编码挑战的基本指南
- 解决E: Package ‘libmysqlclient-dev‘ has no installation candidate报错
- POJ 1694 An Old Stone Game ★(排序+树+递归)
- lecture 5:Policy Optimization 1
- 【Java面试题】40 你所知道的集合类都有哪些?主要方法?
- JAVA学习总结-面向对象
- Linux之动态网页——搭建博客
- 服务器后端开发系列——《实战Nginx高性能Web服务器》 (转载)
- 一共有多少种操作系统
- matlab矩阵二阶微分方程求解,MATLAB解含参数方程、矩阵方程、二阶微分方程组
- windows server2016忘记密码,windows重置密码,windows破解密码,win10忘记密码,win10破解密码,windows server2016破解密码
- 【OpneWRT】编译ipk
- 《Beyond Part Models: Person Retrieval with Refined Part Pooling 》PCB论文解读
- 计算机上的放大快捷键,电脑放大镜热键 怎么取消电脑放大镜快捷键?
- arcoshx怎么用计算机算,双曲函数
热门文章
- 线性回归损失函数为什么要用平方形式
- 全球及中国造纸行业十四五产量调研与运营能力状况分析报告2022版
- 全球及中国智能照明行业应用状况及竞争格局展望报告2021-2027年
- 微商谋定重整纠正错误走路-经信研究:李玉庭谈微商营销
- 学习笔记27—python中numpy.ravel() 和 flatten()函数
- 45度炸队Alpha冲刺博客集
- 【转】采用dlopen、dlsym、dlclose加载动态链接库
- 判断滚动条是否到某个位置,还有滑动的方向,以此来判断什么时候阻止滚动条滚动...
- grep 打印出过滤字段及后3行内容
- Hadoop 部署实例