转载字典地址:http://blog.csdn.net/aladdinty/article/details/3591789
相关文章: http://www.360doc.com/content/13/1003/23/14070959_318861279.shtml
http://www.360doc.com/content/13/1003/23/14070959_318861221.shtml
(本文未经过测试) using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace 集合
{
class 字典
{
public static void Main()
{
//字典也称映射或者散列表,主要特点是可以根据键快速查找值,也可以自由删除添加元素
//在删除添加时,不会像列表一样,移动之后的所有元素,产生内存的开销。
//.net中提供了几个字典,可以使用最主要的类是Dictionary<TKey,TValue>
//这个类与我们上面说的SortedList用法完全一样,这里不再多说了。
//键的类型
//用做字典中键的类型必须重写Object类中的GetHashCode()方法,只要字典类需要确定元素的位置,就要调用本方法
//字典内部通过调用这个方法的返回值,来计算产生散列。。这个算法不做介绍 ,但我要知道,它涉及到素数
//所以字典的容量是一个素数
//GetHashCode()方法的实现需要遵循以下几点
// 1 相同的对象应总是返回相同的值
// 2 不同的对象可以返回相同的值
// 3 应执行得比较快,计算的开销不大。
// 4 不能刨出异常
// 5 应至少使用一个实例字段
// 6 散列码值应平均分布在int可以存储的整个数字区上
// 7 散列码最好在对象的生存期中不发生变化
//提示: 字典的性能取决于GetHashCode()方法的实现代码 Dictionary<EmployeeID , Employee> emps = new Dictionary<EmployeeID,Employee>() ;
EmployeeID idAladdin = new EmployeeID( "C7102" ) ;
Employee aladdin = new Employee( "aladdin" , 5000.00m , idAladdin ) ;
emps.Add( idAladdin , aladdin ) ;
Console.WriteLine( aladdin ) ;
EmployeeID idjacky = new EmployeeID( "C7106" ) ;
Employee jacky = new Employee( "jacky" , 5000.00m , idjacky ) ;
emps.Add( idjacky , jacky ) ;
Console.WriteLine( jacky ) ;
EmployeeID idzhao = new EmployeeID( "C8102" ) ;
Employee zhao = new Employee( "zhao" , 5000.00m , idzhao ) ;
emps.Add( idzhao , zhao ) ;
Console.WriteLine( zhao ) ;
EmployeeID idxiaofei = new EmployeeID( "C9102" ) ;
Employee xiaofei = new Employee( "xiaofei" , 5000.00m , idxiaofei ) ;
emps.Add( idxiaofei , xiaofei ) ;
Console.WriteLine( xiaofei ) ;
EmployeeID iddabi = new EmployeeID( "C7602" ) ;
Employee dabi = new Employee( "dabi" , 5000.00m , iddabi ) ;
emps.Add( iddabi , dabi ) ;
Console.WriteLine( dabi ) ;
EmployeeID idalong = new EmployeeID( "C7302" ) ;
Employee along = new Employee( "along" , 5000.00m , idalong ) ;
emps.Add( idalong , along ) ;
Console.WriteLine( along ) ;
EmployeeID idcarl = new EmployeeID( "C7402" ) ;
Employee carl = new Employee( "carl" , 5000.00m , idcarl ) ;
emps.Add( idcarl , carl ) ;
Console.WriteLine( carl ) ;
EmployeeID idjeff = new EmployeeID( "C7502" ) ;
Employee jeff = new Employee( "jeff" , 5000.00m , idjeff ) ;
emps.Add( idjeff , jeff ) ;
Console.WriteLine( jeff ) ;
EmployeeID iddenny = new EmployeeID( "C6602" ) ;
Employee denny = new Employee( "denny" , 5000.00m , iddenny ) ;
emps.Add( iddenny , denny ) ;
Console.WriteLine( denny ) ;
EmployeeID idmatt = new EmployeeID( "C7701" ) ;
Employee matt = new Employee( "matt" , 5000.00m , idmatt ) ;
emps.Add( idmatt , matt ) ;
Console.WriteLine( matt ) ;
Console.ReadLine() ;
}
}
struct EmployeeID : IEquatable<EmployeeID>
{
private readonly char prefix ;
private readonly int number ;
public EmployeeID( string id )
{
this.prefix = (id.ToUpper())[] ;
int numLength = id.Length - ;
this.number = int.Parse( id.Substring( , numLength > ? : numLength ) ) ;
}
public override string ToString()
{
return this.prefix.ToString() + string.Format( "{0,6:000000}" , number ) ;
}
public override int GetHashCode()
{
return ( number ^ number << ) * 0x15051505 ;
}
public bool Equals( EmployeeID other )
{
return ( other.number == this.number && this.prefix == other.prefix ) ;
}
}
class Employee
{
private string name ;
private decimal salary ;
private readonly EmployeeID id ;
public Employee( string name , decimal salary , EmployeeID id )
{
this.name = name ;
this.salary = salary ;
this.id = id ;
}
public override string ToString()
{
return string.Format( "{0} : {1,-20} {2:C}" , id.ToString() , name,salary ) ;
}
}
}
转载字典地址:http://blog.csdn.net/aladdinty/article/details/3591789的更多相关文章
- 联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/details/72571674
联想笔记本 thinkpad BIOS 超级密码 Supervisor Password 清除 破解 亲测有效 转载地址https://blog.csdn.net/ot512csdn/article/ ...
- 线段树详解 (原理,实现与应用)(转载自:http://blog.csdn.net/zearot/article/details/48299459)
原文地址:http://blog.csdn.net/zearot/article/details/48299459(如有侵权,请联系博主,立即删除.) 线段树详解 By 岩之痕 目录: 一:综述 ...
- 如何简单实现接口自动化测试(基于 python) 原博主地址https://blog.csdn.net/gitchat/article/details/77849725
如何简单实现接口自动化测试(基于 python) 2017年09月05日 11:52:25 阅读数:9904 GitChat 作者:饿了么技术社区 原文:如何简单实现接口自动化测试(基于 python ...
- 排序算法 ----(转载::http://blog.csdn.net/hguisu/article/details/7776068)
1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表.即:先将序列的第1个记录看成是一个有序 ...
- Android 设计模式之观察者模式(转载自:“http://blog.csdn.net/fangchongbory/article/details/7774044”)
/* * 观察者模式 * 定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...
- OpenSessionInViewFilter 的配置及作用(原文地址: http://blog.csdn.net/sunsea08/article/details/4545186)
spring为我们解决hibernate的Session的关闭与开启问题. Hibernate 允许对关联对象.属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Sessio ...
- 设计模式15---Android 观察者模式(转载自:“http://blog.csdn.net/fangchongbory/article/details/7774044”)
/* * 观察者模式 * 定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态发送改变时,所以依赖于它的 * 对象都得到通知并被自动更新 * * 当然, ...
- asp.net mvc(模式)和三层架构(BLL、DAL、Model)的联系与区别 转载自:http://blog.csdn.net/luoyeyu1989/article/details/8275866
首先,MVC和三层架构,是不一样的. 三层架构中,DAL(数据访问层).BLL(业务逻辑层).WEB层各司其职,意在职责分离. MVC是 Model-View-Controller,严格说这三个加起来 ...
- 中文录入问题 转载自:http://blog.csdn.net/ichsonx/article/details/8625925
2.1中文录入问题 默认安装的msysgit的shell环境中无法输入中文,为了能在shell界面输入中文,需要修改配置文件/etc/inputrc,增加或修改相关配置如下: #disable/ena ...
随机推荐
- C语言中access、_mkdir、sprintf、 fopen、fwrite函数
int access(const char *filename, int amode); amode参数为0时表示检查文件的存在性,如果文件存在,返回0,不存在,返回-. 这个函数还可以检查其它文件属 ...
- struts (三)
1. <action name="test" class="com.gc.Test"> <result name="success& ...
- [SQL]多列的行转列
create table t(name varchar(),subject varchar(),mark int) insert into t union all union all union al ...
- CodeForces 602E【概率DP】【树状数组优化】
题意:有n个人进行m次比赛,每次比赛有一个排名,最后的排名是把所有排名都加起来然后找到比自己的分数绝对小的人数加一就是最终排名. 给了其中一个人的所有比赛的名次.求这个人最终排名的期望. 思路: 渣渣 ...
- jQuery基础---filter()和find()
这是jQuery里常用的2个方法.他们2者功能是完全不同的,而初学者往往会被误导. 首先 我们看.find()方法:现在有一个页面,里面HTML代码为;程序代码 <div class=" ...
- 程序员必备:Oracle日常维护命令
上一篇讲了Linux的日常维护命令,这篇讲讲Oracle的日常维护命令.工作中需要使用Oracle数据库的童鞋们,相信或多或少都需要对Oracle做一些基本的维护操作,例如导入导出总该有吧?( ...
- 菜鸟-手把手教你把Acegi应用到实际项目中(1.2)
7) daoAuthenticationProvider 进行简单的基于数据库的身份验证.DaoAuthenticationProvider获取数据库中的账号密码并进行匹配,若成功则在通过用户身份的同 ...
- unique踢出相同元素
unique函数的功能是:去除相邻的重复元素(只保留一个). 函数参数:unique(first,last,compare); //first为容器的首迭代器,last为容器的末迭代器,compare ...
- 云计算三种服务模式SaaS、PaaS和IaaS及其之间关系(顺带CaaS、MaaS)
云计算架构图 很明显,这五者之间主要的区别在于第一个单词,而aaS都是as-a-service(即服务)的意思,这五个模式都是近年来兴起的,且这五者都是云计算的落地产品,所以我们先来了解一下云计算是什 ...
- Android之EventBus使用详解
一.概述 当Android项目越来越庞大的时候,应用的各个部件之间的通信变得越来越复杂,例如:当某一条件发生时,应用中有几个部件对这个消息感兴趣,那么我们通常采用的就是观察者模式,使用观察者模式有一个 ...