关于Hashtable与ArrayList存储string的性能比较

1、做从Title 表中删除TitleName时,想把对应Exam(Paper)表中的该Name,另存为另一个名字。
因此,先从Title里提取出所有的TitleName,然后再并入Exam(Paper)表中的Name,最后需要排除所有相同的(两次提取可能有相同的,也有不同的)以及Title表删除的这个TitleName.本人使用ArrayList频率比较高一点,先采用了ArrayList.后发现他人如下所述:
Hashtable与ArrayList存储object的性能比较,(对大数据量)
先插入排序后删除,确实比一条一条判断是否存在后再插入快的多(近2个数量级的差别!数量越大差别越大)
但是,最快的仍然是用Hashtable(其实这还是先判断是否存在后插入),比插入后排序高又近一个数量级(5倍以上速度)

故用Hashtable替换了ArrayList.
摘录如下:

1.1  //使用Hashtable
    if(myDataSet!=null)
    {
     DataTable Dtab =myDataSet.Tables[0];

     int   Row=Dtab.Rows.Count;
     if(Row>0)
     {
      for(int i=0;i<Row;i++)  
      {
       string contents=Dtab.Rows[i][0].ToString();
       //去掉 重复的 和 原来的** 名称
       if(!ht.ContainsKey(contents))
       {
        if(contents!=this.oldTitleName)
        {
         ht.Add(contents,null);
        }
       }
      } 
     }
     else
     {
      MessageBox.Show(this,"***查询到0条记录。","提取数据",MessageBoxButtons.OK,MessageBoxIcon.Information);
     }
    }

1.2  //使用ArrayList    
    if(!this.arrStrTitle.Contains(contents))
       {
        if(contents!=this.oldTitleName)
        {
         arrStrTitle.Add(contents);  
        }
       }
2、循环ArrayList (或者Hashtable),将数据填加进ComboBox中

2.1 //使用Hashtable

    if(this.ht!=null&&this.ht.Count>0)
    {
     System.Collections.IDictionaryEnumerator myEnumerator =this.ht.GetEnumerator();
     while (myEnumerator.MoveNext() )
     {
      string strTitleName=(string)myEnumerator.Key;
      this.cboTitleName.Items.Add(strTitleName);
     }
    }

 2.2 //使用ArrayList
if(this.arrStrTitle!=null&&this.arrStrTitle.Count>0)
    {
     System.Collections.IEnumerator myEnumerator =this.arrStrTitle.GetEnumerator();
     while (myEnumerator.MoveNext() )
     {
      string strTitleName=(string)myEnumerator.Current;
      this.cboTitleName.Items.Add(strTitleName);
     }
    }

原文地址:https://www.cnblogs.com/flashicp/p/677338.html