正文

[.NET]C#学习笔记--System.Collections详解和示例2007-07-13 13:43:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/maliang1225/27503.html

分享到:

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;   }  }   } }  

阅读(1923) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册