System.Collections 常用类,结构和结构: 类:ArrayList,Hashtable,SortedList 接口:ICollection,IEnumerator,IList 结构:DictionaryEntry 类: ArrayList: 数组列表,是Array类的优化版本。。 Hashtable: 一种数据结构,将数据作为一组键(Key)值(Value)来存储,Hash表中数据将会根据Key来建立索引,一般用来存储几万,几十万条数据,数据搜索性能高。 SortedList: 一种排序的数据列表,也是将数据作为一组键(Key)值(Value)来存储,也会根据Key来建立索引,一般用来存储几百,几千条数据,当存储几万条是数据的搜索性能就会降低,因此超过上万建议使用Hashtable。 接口: ICollection:定义了一组管理元素的函数,如添加,删除等等。 IEnumerator:继承于ICollection,因此具有管理元素的功能,且添加了新的功能,既可以通过他来遍力元素。 IList:继承于IEnumerator,因此具有管理,遍力且新加了通过索引查找元素。 结构: DictionaryEntry:一个结构体,包括了一个键(Key)和值(Value)变量,既键值对。Hashtable和SortedList的变量数据类型为DictionaryEntry。因此可以通过DictionaryEntry来遍力Hashtable和SortedList。 /* Hashtable示例 */ /* 4种遍力Hashtable的方法 */ /* 题目描述:添加员工资料到Hasttable,将姓名添加到列表框,点击列表框中的名字则显示该员工的资料。并可以删除该员工的资料 */ using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using System.Collections; namespace HashEmpManager{ public partial class frmEmpManger : Form { private Hashtable _hashtable = new Hashtable(); // 创建一个哈希表对象 public frmEmpManger() { InitializeComponent(); } private void btnAdd_Click(object sender, EventArgs e) { /* 判断数据输入是否完整 */ if ((txtName.Text == "") || (txtID.Text == "") || (txtDept.Text == "") || (txtSalary.Text == "")) { MessageBox.Show("员工资料不能为空!", "错误"); return; } EmpInfor emp = new EmpInfor(); /* 员工资料赋值 */ emp.ID = txtID.Text; emp.Name = txtName.Text; emp.Dept = txtDept.Text; emp.Salary = txtSalary.Text; /* 当添加相同编号的ID时,则捕捉这个异常 */ try { /* 将emp对象作为值添加到哈希表中,键为emp.ID, 哈希表分键和值2部分 */ _hashtable.Add(emp.ID, emp); } catch (ArgumentException ex) { MessageBox.Show("不能添加重复的员工ID", "错误"); return; } /* 将员工的姓名添加到列表框中 */ lstEmpInfor.Items.Add(emp.Name); /* 清空文本框 */ txtName.Text = null; txtID.Text = null; txtDept.Text = null; txtSalary.Text = null; } private void btnCancle_Click(object sender, EventArgs e) { Application.Exit(); // 退出程序 } private void btnRelease_Click(object sender, EventArgs e) { string strName = (string)lstEmpInfor.SelectedItem; // 获得列表框选中的值 foreach (string key in _hashtable.Keys) { if (strName == ((EmpInfor)_hashtable[key]).Name) // 如果与列表框中选中的姓名相等,则给文本框赋值 { _hashtable.Remove(key); // 删除哈希表中的项 lstEmpInfor.Items.Remove(lstEmpInfor.SelectedItem); // 从列表框中删除员工姓名 /* 清空文本框 */ txtName.Text = null; txtID.Text = null; txtDept.Text = null; txtSalary.Text = null; break; // 退出循环 } } } /* 在文本框中显示选中的哈希表中的值 */ private void lstEmpInfor_SelectedIndexChanged(object sender, EventArgs e) { string strName = (string)lstEmpInfor.SelectedItem; // 获得选中列表框中的值 // 遍历法一: /* 遍历哈希表中的键,其值为string */ foreach (string key in _hashtable.Keys) { /* 注:因为_hashtable[key]).Name返回类型为Object,所以要强制转换为EmpInfor对象 */ if (strName == ((EmpInfor)_hashtable[key]).Name) // 如果与列表框中选中的姓名相等,则给文本框赋值 { txtID.Text = ((EmpInfor)_hashtable[key]).ID; txtName.Text = ((EmpInfor)_hashtable[key]).Name; txtDept.Text = ((EmpInfor)_hashtable[key]).Dept; txtSalary.Text = ((EmpInfor)_hashtable[key]).Salary; break; // 退出循环 } } // 遍历法二: /* 遍历哈希表中的值,其值为EmpInfor对象 */ //foreach (EmpInfor emp in _hashtable.Values) //{ // if (strName == emp.Name) // 如果与列表框中选中的姓名相等,则给文本框赋值 // { // txtID.Text = emp.ID; // txtName.Text = emp.Name; // txtDept.Text = emp.Dept; // txtSalary.Text = emp.Salary; // break; // 退出循环 // } //} // 遍历法三: /* 遍历哈希表中的健值,其健值为DictionaryEntry对象 */ //foreach (DictionaryEntry DE in _hashtable) //{ // /* 注:DictionaryEntry是一个结构体,存储了一个Key(键)和一个Value(值),称为键值对, // * 而Hashtable和SortedList中的变量的数据类型就是DictionaryEnty,所以可以那样遍力 */ // if (strName == ((EmpInfor)DE.Value).Name) // { // txtID.Text = ((EmpInfor)DE.Value).ID; // txtName.Text = ((EmpInfor)DE.Value).Name; // txtDept.Text = ((EmpInfor)DE.Value).Dept; // txtSalary.Text = ((EmpInfor)DE.Value).Salary; // break; // 退出循环 // } //} // 遍历法四: /* 遍历哈希表中的健值,其健值为IDictionaryEnumerator对象 */ //IDictionaryEnumerator myEnum = _hashtable.GetEnumerator(); //while (myEnum.MoveNext()) //{ // /* IDictionaryEnumerator我想是继承了IDictionary和IEnumerator2个接口 */ // EmpInfor empEnum = (EmpInfor)_hashtable[myEnum.Key]; // if (strName == empEnum.Name) // { // txtID.Text = empEnum.ID; // txtName.Text = empEnum.Name; // txtDept.Text = empEnum.Dept; // txtSalary.Text = empEnum.Salary; // break; // 退出循环 // } //} } } public class EmpInfor // 定义一个员工类 { private string _empID; // ID private string _empName; // 姓名 private string _empDept; // 部门 private string _empSalary; // 工资 public string ID // 定义ID属性 { set // 设置ID { _empID = value; } get // 获得ID { return _empID; } } public string Name // 定义姓名属性 { set { _empName = value; } get { return _empName; } } public string Dept // 定义部门属性 { set { _empDept = value; } get { return _empDept; } } public string Salary // 定义工资属性 { set { _empSalary = value; } get { return _empSalary; } } }} /* SortedList的示例: */ /* 包括遍力SortedList和GetType()方法 */ using System;using System.Collections; namespace SortedListHere{ /// <summary> /// Class1 的摘要说明。 /// </summary> class SortedListExample { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { // // TODO: 在此处添加代码以启动应用程序 // // 创建SortedList 对象 SortedList objCarDetails = new SortedList( ); // 添加值 objCarDetails.Add( "1991", new Car( "1991", "宝马" ) ); objCarDetails.Add( "1992", new Car( "1992", "夏利" ) ); objCarDetails.Add( "2002", new Car( "2002", "雪弗莱" ) ); objCarDetails.Add( "1998", new Car( "1998", "金杯" ) ); // 通过ArrayList获得Keys,然后对Keys排序,最后再来遍历 ArrayList akeys = new ArrayList( objCarDetails.Keys ); akeys.Sort( ); foreach( string skey in akeys ) { Car objCar = (Car)objCarDetails[skey]; Console.WriteLine( objCar.Name ); } Console.WriteLine( "\n" ); // 通过Keys遍历 利用到SortList的索引 foreach( string strKey in objCarDetails.Keys ) { Console.WriteLine( ( (Car)objCarDetails[strKey] ).Name ); } Console.WriteLine( "\n" ); // 通过Values遍历 就不能利用到SortList的索引了。。 foreach( Car objCar in objCarDetails.Values ) { Console.WriteLine( objCar.Name ); } Console.WriteLine( "\n" ); // ToString( ) 返回对象类型 Console.WriteLine( objCarDetails.ToString( ) ); // GetType( ) 获得对象的类型,及类型的类型,如果对象为Car, 则GetType()则获得Car的属性和方法 Car car3 = new Car( "2002", "雪弗莱" ); /* 获得Car对象的属性名称 */ Console.WriteLine( car3.GetType().GetProperties()[0].Name ); Console.WriteLine( "\n" ); // 通过DictionaryEntry遍历 foreach( DictionaryEntry objDE in objCarDetails ) { Console.WriteLine( objDE.Key ); Console.WriteLine( objDE.Value ); Console.WriteLine( ( (Car)objDE.Value ).Name ); } int i = 1; while ( i == 1 ) { Console.Write( "输入汽车的型号:" ); string model = Console.ReadLine( ); // 检查是否存在该值 if ( objCarDetails.ContainsKey( model ) ) { // 搜索型号并从排序列表中获取对象 Car objCar = (Car)objCarDetails.GetByIndex( objCarDetails.IndexOfKey( model ) ); // 获得该型号的对象 Console.WriteLine( "顺序 = {0}",objCarDetails.IndexOfKey( model ) ); // 显示在SortList中的位置 Console.WriteLine( "汽车名称 = {0}", objCar.Name ); // 显示名字 // 第二种方式通过key获得对象并输出名字 Console.WriteLine( "汽车名称 = {0}", ( (Car)objCarDetails[model] ).Name ); } else { Console.WriteLine( "型号未找到" ); } Console.WriteLine( "输入1继续,输入0退出" ); i = Convert.ToInt32( Console.ReadLine( ) ); } Console.ReadLine( ); } } public class Car { private string _carModel; private string _carName; public Car( string carModel, string carName ) { _carModel = carModel; _carName = carName; } // 获取_carModel值 public string Model { get { return _carModel; } } // 获取_carName值 public string Name { get { return _carName; } } } }

评论