项目总结——hashtable排序问题

来源:互联网 发布:py是什么意思网络语言 编辑:程序博客网 时间:2024/06/09 18:42

前言:

        对于Hashtable在我的上篇博客中有提到,是用在了事务处理中,向sqlhelper传递参数,这个用的很巧妙不知道大家有没有进一步的研究,但是为什么现在需要用到Hashtable的排序呢。大家跟着我想这样的一个场景,现在需要注册一个新用户,注册用户的时候需要有如下的业务逻辑:每个用户拥有或多张卡,注册用户的时候需要对卡进行一定金额的充值。


一、业务表分析:


       对于这个业务逻辑我们建立的关系表需要有三张,1.用户信息表,用于保存用户的基本信息;2.卡信息表,用于保存卡的基本信息;3.充值记录表,用于保存充值记录信息。当然考虑数据库建立的三范式,我们还需要保证这三张表具有主外键的关系。用一张数据库关系图来表示:


二、与事务机制的联系:


         当然我们会想到这“三件”事必须同时完成或同时不完成,他们的这种关系就组成了一个事务操作,而这个要求即事务的原子性。

三、为什么要对Hashtable排序:


          要实现这样的需求,还需要满足的操作要求:三张表的插入顺序是:用户表——卡表——充值表。

         对于Hashtable有一定了解的人都知道Hashtable的一个重要的特点就是排序无序的。

         对于这个无序的说明有这样的一个例子:

[vb] view plaincopyprint?
  1. public static void Main()  
  2. {  
  3.     Hashtable ht = new Hashtable();  
  4.       
  5.     ht.Add("key1""value1");  
  6.      ht.Add("key2""value2");  
  7.     ht.Add("key3""value3");  
  8.     ht.Add("key4""value4");  
  9.      ht.Add("key5""value5");  
  10.       
  11.      foreach (string str in ht.Keys)  
  12.      {  
  13.         Console.WriteLine(str + ":" + ht[str]);  
  14.     }  
  15. }  

        运行的结果:

  

        通过这个小例子就可以理解了哈希表的无序性。那我们怎么保证程序按照我们想要的顺序在sqlhelper中逐个的执行呢。(这个执行的代码看上篇博客)我们就需要Hashtable进行排序了。


四、排序的方法:


        这里我主要给大家介绍3种方法:


         1.我按什么顺序加进去就按什么顺序输出:

[vb] view plaincopyprint?
  1. public class NoSortHashTable : Hashtable  
  2. {  
  3.     private ArrayList list = new ArrayList();  
  4.     public override void Add(object key, object value)  
  5.     {  
  6.         base.Add(key, value);  
  7.         list.Add(key);  
  8.     }  
  9.     public override void Clear()  
  10.     {  
  11.         base.Clear();  
  12.         list.Clear();  
  13.     }  
  14.     public override void Remove(object key)  
  15.     {  
  16.         base.Remove(key);  
  17.         list.Remove(key);  
  18.     }  
  19.     public override ICollection Keys  
  20.     {  
  21.         get  
  22.         {  
  23.             return list;  
  24.         }  
  25.     }  
  26. }  

        这里注意:ArrayList是不排序的(添加的顺序就是输出的顺序)。让它和hashtable结合不就实现这种功能的吗?这样继承了Hashtable具有Hashtable的丰富功能,又满足ArrayList不排序的功能。满足我们的要求。

[vb] view plaincopyprint?
  1. public static void Main()  
  2. {  
  3.     NoSortHashTable ht = new NoSortHashTable();  
  4.       
  5.     ht.Add("key1""value1");  
  6.     ht.Add("key2""value2");  
  7.     ht.Add("key3""value3");  
  8.     ht.Add("key4""value4");  
  9.     ht.Add("key5""value5");  
  10.     foreach (string str in ht.Keys)  
  11.     {  
  12.         Console.WriteLine(str + ":" + ht[str]);  
  13.     }  
  14. }  

        这样一运行就满足我的要求了:

             

       成功了!


原创粉丝点击