集合

来源:互联网 发布:apache cgi 编辑:程序博客网 时间:2024/06/09 19:51

集合

一,集合

1,  命名空间:System.Collections

2,  ArrayList:相当于动态数组

ArrayList list=new ArrayList();

ArrayList  list=new ArrayList(10);   //可以指定容量

常用方法:

方法

说明

Add

将对象添加到 ArrayList 的结尾处

Clear

ArrayList 中移除所有元素

Contains 

确定某元素是否在 ArrayList

IndexOf 

返回 ArrayList 或它的一部分中某个值的第一个匹配项的的索引

Insert 

将元素插入 ArrayList 的指定索引处

LastIndexOf 

返回 ArrayList 或它的一部分中某个值的最后一个匹配项的索引

Remove 

ArrayList 中移除特定对象的第一个匹配项

RemoveAt 

移除 ArrayList 的指定索引处的元素

Reverse 

ArrayList 或它的一部分中元素的顺序反转

Sort 

ArrayList 或它的一部分中的元素进行排序

A, 添加元素

Student s=new Student(“Jack”);

list.Add(s);

list.Isert(2,s);   //在下标为2出插入s

注意:当存储的元素的个数超出ArrayList集合容量时,自动增长一倍

ArrayList集合允许Null值,并允许出现重复元素

删除元素

list.Clear();    //移除所有的元素

list.Remove(s);   //从集合中删除特定的对象的第一个匹配项

list.RemoveAt(0);   //移除指定下标处的元素

 

获取元素:和数组的操作一样,通过下标访问元素,下标从0开始

Object o=list[0];

注意:从集合中取出元素后要进行强制转换

 

遍历ArrayList集合:

for(int i=0;i<list.Count;i++)

{

               Student s=list[0]  as Student;

}

 

foreach(Object o in list)

{    }

3ArrayList集合对应的泛型集合Lit< Type>

  List<Student> list=new List<Student>();

 

Student s1=new Student(“Jack”);

Student s2=new Student(“Rose”);

list.Add(s1);

list.Add(s2);

Student s=list[0];   //不需要强制转换

 

4,  ArrayListList<T>泛型集合的对比:

 

ArrayList

List<T>

相同点

对集合数据的操作(增加、删除和获取)一致

不同点

存储任何类型数据

限定存储数据的类型

获取元素需要类型转换

获取元素时不需要类型转换

 

 

5Hashtable:通过键/值对的方式存储数据,通过键获取值

       Hashtable  ht=new Hashtable ();

   Hashtable常用属性和方法:

方法

说明

Add 

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

Clear 

Hashtable 中移除所有元素

Contains 

确定 Hashtable 是否包含特定键

ContainsKey

确定 Hashtable 是否包含特定键

ContainsValue 

确定 Hashtable 是否包含特定值

Remove 

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

属性

说明

Count 

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

Keys 

获取包含 Hashtable 中的键的 ICollection

Values 

获取包含 Hashtable 中的值的 ICollection

  

添加元素:

ht.Add(“1”,”Jack”);

Student s=new Student(“Rose”);

ht.Add(s.Name,s);

注意:向Hashtable集合中添加元素时,键值不允许重复,否则会出现异常

         Hashtable集合中的元素是无序的

 

获取元素

Student s=ht[“Rose”] As Student;   //必须进行类型转换

删除元素:通过键值删除元素

list.Remove(“Rose”);

 

遍历Hashtable集合中的元素:

foreach(Object o in ht.Values)

{

       Student s=o as student;

}

 

6Hashtable对应的泛型集合Dictionary<K,V>

       Dictionary<string,Student>  dictionary=new Dictionary<string,Student>();

 

       dictionary.Add(s.Name,s);

 

HashtableDictionary的区别:

 

Hashtable

Dictionary<KV >

相同点

对集合数据的操作(增加、删除和获取)一致

不同点

存储任何类型数据

限定存储数据的类型

获取元素需要类型转换

获取元素时不需要类型转换

 

 

7SortedList:可以通过键值访问也可通过下标访问

   SortedList常用方法;

方法

说明

Add 

将带有指定键和值的元素添加到 SortedList 对象

Clear 

SortedList 对象中移除所有元素

GetByIndex 

获取 SortedList 对象的指定索引处的值

GetKey 

获取 SortedList 对象的指定索引处的键

GetKeyList 

获取 SortedList 对象中的键

GetValueList 

获取 SortedList 对象中的值

IndexOfKey 

返回 SortedList 对象中指定键的从零开始的索引

IndexOfValue 

返回指定的值在 SortedList 对象中第一个匹配项的从零开始的索引

Remove 

SortedList 对象中移除带有指定键的元素

RemoveAt 

移除 SortedList 对象的指定索引处的元素

SetByIndex 

替换 SortedList 对象中指定索引处的值

      

SortedList sl=new SortedList();

sl.Add(“1”,”Jack”);

sl.Add(“2”,s);

Student s=sl.GetByIndex(1) as Student;  //需要类型转换

 

 

二,             集合排序

1, 实现IComparable<T>接口中的CompareTo方法

public class Student : IComparable<Student>

{

        string name;

        int age;

        public void ShowInfo(){}

 

        public int CompareTo(Student other)

{

       if(this.age>other.age)  return 1;

       if(this.age==other.age)  return 0;

    if(this.age<other.age)   return -1;

}

}

 

ArrayList list=new ArrayList();

list.Add(s1);

list.Add(s2);

list.Add(s3);

 

list.Sort();   //默认按年龄升序排列

 

IComparable<T>接口中的CompareTo()方法是集合在对元素排序时自动调用的,但存在的缺陷是只能按一种方式进行排序,若要按名称进行排序就无法进行了。要想实现按照多种方式排序可以使用IComparer<T>接口

 

2, 实现IComparer<T>接口中的Compare方法

Eg:

public class SortedByAge:IComparer<Student>

{

        public int Compare(Student s1,Student s2)

        {

               if(s1.age>s2.age)  return 1;

               if(s1.age==s2.age)  return 0;

               if(s1.age<s2.age)  return -1;

}

}

 

 

public class SortedByName:IComparer<Student>

{

        public int Compare(Student s1,Student s2)

        {

               return s1.Name.CompareTo(s2.Name);   //直接调用stringCompareTo方法

}

}

 

 

ArrayList list=new ArrayList();

list.Add(s1);

list.Add(s2);

list.Add(s3);

 

list.Sort(new SortedByAge())    //按年龄升序进行排序

list.Sort(new SortedByName());   //按姓名升序排列

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 和朋友聊天没话题怎么办 跟朋友聊天没话题怎么办 和朋友聊天找不到话题怎么办 qq加好友忽略了怎么办 微信加好友收不到验证消息怎么办 陌陌距离乱了怎么办 qq不能点赞了怎么办 快递发货地址写错了怎么办 订的海鲜不发货怎么办 拉人进群频繁了怎么办 qq群邀请过于频繁怎么办 qq一直被拉进群怎么办 qq号被冻结解封不了怎么办 2018qq自动进群怎么办 手机视频传到电脑倒着怎么办 qq群图片过期了怎么办 q号加不了群怎么办 q号加不了好友怎么办 q号被冻结了怎么办 qq群200人满了怎么办 畅聊之火消失了怎么办 手机版WPS打开文档空白怎么办 空白表格怎么打印不出来怎么办 微信朋友太少怎么办 js和CSS加载失败怎么办 熹妃q传密码忘了怎么办 苹果手机淘宝占用空间大怎么办 苹果相册储存空间不足怎么办 企业网银里的收款名单丢失怎么办 发邮件发错了怎么办 qq群成员满500了怎么办 为什么qq群查不到信息怎么办 tiger杯子油漆划掉了怎么办 手被油漆弄到了怎么办 被油漆弄到衣服怎么办 QQ发表情成问号怎么办 qq登不了微信怎么办 qq不能登录微信怎么办 qq号一年没用了怎么办 微信里别人可以看到我手机号怎么办 用手机号注册的微信换号后怎么办