Hashtable的用法及其优缺点?

    技术2022-05-11  62

    一。介绍

       表示键/值对的集合,这些键/值对 根据键的哈希代码进行组织。

       提供快速的查询。元素的存储与顺序无关。不能在指定位置插入元素,因为它本身没有有效的排序。感觉它的优点体现在查询上。

       hashtable的键必须是唯一的,没有有效的排序,它进行的是内在的排序

     

    public class Hashtable : IDictionary, ICollection, IEnumerable,

       ISerializable, IDeserializationCallback, ICloneable

    每个元素是一个存储在 DictionaryEntry 对象中的键/值对。键不能为空引用(Visual Basic

    中为 Nothing),但值可以。

     

    注:所谓的DictionaryEntry 结构,就是定义可设置或检索的字典键值对,有一个Key属性,

    一个Value属性,分别代表键和值

     

    二。添加

    Hashtable.Add 方法

    public virtual void Add(

       object key,

       object value

    );

    将带有指定键和值的元素添加到 Hashtable 中。

    key

    要添加的元素的键。

    value

    要添加的元素的值。该值可以为空引用(Visual Basic 中为 Nothing)。

    通过设置 Hashtable 中不存在的键的值,Item

    属性也可用于添加新元素。例如:myCollection["myNonexistentKey"] = myValue。但是,如

    果指定的键已经存在于 Hashtable 中,设置 Item 属性将改写旧值。相比之下,Add 方法不

    修改现有元素。

    Hashtable hTable = new Hashtable();

    hTable.Add("1","a");

    hTable.Add("2","b");

    hTable.Add("3","c");

    hTable.Add("4","d");

    hTable.Add("5","e");

    //hTable.Add("1","aaaaaaaaaaa"); //出错,因为已经有键“1”

    hTable["1"] = "aaaaaaaaaaa"; //ok

    DropDownList2.DataSource = hTable;

    DropDownList2.DataTextField = "Key";

    DropDownList2.DataValueField = "Value";

    DropDownList2.DataBind();

     

     

    二。删除

    1。public virtual void Remove(

       object key

    );

    从 Hashtable 中移除带有指定键的元素。

    如果 Hashtable 不包含带有指定键的元素,则 Hashtable 保持不变。不引发异常。

     

    2。public virtual void Clear();

    从 Hashtable 中移除所有元素。

    Count 设置为零。容量保持不变。

     

    三。其他

    1。public virtual ICollection Values {get;}

    获取包含 Hashtable 中的值的 ICollection。

    注:ICollection 接口,定义所有集合的大小、枚举数和同步方法。

    Hashtable hTable = new Hashtable();

    hTable.Add("1","a");

    hTable.Add("2","b");

    hTable.Add("3","c");

    hTable.Add("4","d");

    hTable.Add("5","e");

    Label2.Text = "";

    foreach (string strKey in hTable.Keys) //遍历

    {

    Label2.Text += strKey;

    Label2.Text += ",";

    }

     

    2。public virtual ICollection Keys {get;}

    获取包含 Hashtable 中的键的 ICollection。

    返回的 ICollection 不是静态副本;相反,ICollection 反向引用原始 Hashtable 中的键。

    因此,对 Hashtable 的更改继续反映到 ICollection 中。

     

    3。public virtual bool Contains(

       object key

    );

    确定 Hashtable 是否包含特定键。

     

    4。public virtual bool ContainsKey(

       object key

    );

    确定 Hashtable 是否包含特定键。与Contains同

     

    5。public virtual bool ContainsValue(

       object value

    );

    确定 Hashtable 是否包含特定值

     

    6。public virtual int Count {get;}

    获取包含在 Hashtable 中的键值对的数目 


    最新回复(0)