我不要MSDN中的代码,只想知道一下,在你们的项目中 哈希表 的用途。
我个人感觉 哈希表 有点像读取 INI 文件,有一个键名,然后有一个对应的键值。
可使用语言述叙,不一定使用到代码。
//使用 Hashtable 类中的 Add 方法向 Hashtable 集合中添加项。然后使用 foreach 语句循环访问该集合。
System.Collections.Hashtable ht = new System.Collections.Hashtable();
ht.Add("jenny", "3638952");
ht.Add("John", "555-0150");
ht.Add("Enju", "555-0199");
ht.Add("Molly", "555-0151");
ht.Add("James", "555-0142");
ht.Add("Ahmed", "555-0128");
ht.Add("Leah", "555-0100");
Console.WriteLine("Name\t\tNumber");
foreach (string name in ht.Keys)
{
Console.WriteLine(name + "\t" + ht[name]);
}
我个人感觉 哈希表 有点像读取 INI 文件,有一个键名,然后有一个对应的键值。
可使用语言述叙,不一定使用到代码。
//使用 Hashtable 类中的 Add 方法向 Hashtable 集合中添加项。然后使用 foreach 语句循环访问该集合。
System.Collections.Hashtable ht = new System.Collections.Hashtable();
ht.Add("jenny", "3638952");
ht.Add("John", "555-0150");
ht.Add("Enju", "555-0199");
ht.Add("Molly", "555-0151");
ht.Add("James", "555-0142");
ht.Add("Ahmed", "555-0128");
ht.Add("Leah", "555-0100");
Console.WriteLine("Name\t\tNumber");
foreach (string name in ht.Keys)
{
Console.WriteLine(name + "\t" + ht[name]);
}
private static Hashtable paramDirections = Hashtable.Synchronized(new Hashtable());
private static Hashtable paramTypes = Hashtable.Synchronized(new Hashtable()); static DataAccessParameterCache()
{
paramTypes.Add("bigint", SqlDbType.BigInt);
paramTypes.Add("binary", SqlDbType.Binary);
paramTypes.Add("bit", SqlDbType.Bit);
paramTypes.Add("char", SqlDbType.Char);
paramTypes.Add("datetime", SqlDbType.DateTime);
paramTypes.Add("decimal", SqlDbType.Decimal);
paramTypes.Add("float", SqlDbType.Float);
paramTypes.Add("image", SqlDbType.Image);
paramTypes.Add("int", SqlDbType.Int);
paramTypes.Add("money", SqlDbType.Money);
paramTypes.Add("nchar", SqlDbType.NChar);
paramTypes.Add("ntext", SqlDbType.NText);
paramTypes.Add("numeric", SqlDbType.Decimal);
paramTypes.Add("nvarchar", SqlDbType.NVarChar);
paramTypes.Add("real", SqlDbType.Real);
paramTypes.Add("smalldatetime", SqlDbType.SmallDateTime);
paramTypes.Add("smallint", SqlDbType.SmallInt);
paramTypes.Add("smallmoney", SqlDbType.SmallMoney);
paramTypes.Add("sql_variant", SqlDbType.Variant);
paramTypes.Add("text", SqlDbType.Text);
paramTypes.Add("timestamp", SqlDbType.Timestamp);
paramTypes.Add("tinyint", SqlDbType.TinyInt);
paramTypes.Add("uniqueidentifier", SqlDbType.UniqueIdentifier);
paramTypes.Add("varbinary", SqlDbType.VarBinary);
paramTypes.Add("varchar", SqlDbType.VarChar);
paramDirections.Add((short) 1, ParameterDirection.Input);
paramDirections.Add((short) 2, ParameterDirection.InputOutput);
paramDirections.Add((short) 4, ParameterDirection.ReturnValue);
}
Dictionary <Key,Value>是泛型版本
private void buttonSaveNetConfig_Click(object sender, EventArgs e)
{
Hashtable hst = new Hashtable();
hst.Add("ComServerIP", textBoxComServerIP.Text.Trim());
hst.Add("ComServerPort", textBoxComServerPort.Text.Trim());
Config.SetConfigValue(hst);
lableTestComServerConnResult.Text = "保存成功!";
}
//SetConfigValue方法代码段:(其实我感觉用string数组也差不多。)
//设置配置项并保存
foreach (DictionaryEntry de in hst)
{
XmlNode xNode;
XmlElement xElem1;
XmlElement xElem2; xNode = xDoc.SelectSingleNode("//appSettings"); xElem1 = (XmlElement)xNode.SelectSingleNode("//add[@key='" + de.Key.ToString() + "']");
if (xElem1 != null) xElem1.SetAttribute("value", de.Value.ToString());
else
{
xElem2 = xDoc.CreateElement("add");
xElem2.SetAttribute("key", de.Key.ToString());
xElem2.SetAttribute("value", de.Value.ToString());
xNode.AppendChild(xElem2);
} xDoc.Save(path);
}
HashTable可以支持任何类型的key/value键/值对。
HashTable的优点就在于其索引的方式,速度非常快。
合适的数组大小是哈希表的性能的关键。哈希表的尺寸最好是一个质数。
哈希函数是一个映象,将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可。
foreach (DictionaryEntry de in HS)
{
Console.WriteLine(de.Value.ToString());
Console.WriteLine(de.Key.ToString());
}
foreach (System.Collections.DictionaryEntry objDE in objHasTab)
{
Console.WriteLine(objDE.Key.ToString());
Console.WriteLine(objDE.Value.ToString());
}System.Collections.IDictionaryEnumerator enumerator = objHashTable.GetEnumerator();
while (enumerator.MoveNext())
{
Console.WriteLine(enumerator.Key);
Console.WriteLine(enumerator.Value); }参考