C#学习笔记之五:集合

1.集合接口和集合类型

请复习接口和类的关系!

2.有哪些主要的预定义集合接口?

A.非泛型接口
IEnumerator,IEnumerable,IList,IDictionary,IComparer,ICollection,IEqualityComparer。
位于命名空间System.Collections
B.泛型接口
以上几种非泛型接口的泛型版本<T>,此外还有一个没有对应非泛型版本的接口ISet<T>。
位于命名空间System.Collections.Generic

3.有哪些常用的预定义集合类型?(集合类型的用法可以类比Python的相应模块用法)

(1)ArrayList(实现了IList,IEnumerable和ICollection接口):只能是一维;允许集合元素重复;元素类型为System.Object,读取时需要拆箱。具体成员及用法用时再查手册。有泛型等效版本List<T>。
(2)HashTable(实现了IDictionary,IEnumerable和ICollection接口):表示键-值对的集合,每个键-值对是一个DictionaryEntry对象;键不能重复不能为null,值可以;不能排序,根据键的哈希码组织;键的冲突是运行时异常,所以动态添加键-值对时需要try-catch。
(3)SortedList(实现了IDictionary,ICollection和IEnumerable接口):类似HashTable,是对键-值对的管理;区别在于这个类型支持键排序。
(4)Queue(实现了ICollection和IEnumerable接口):FIFO;容量按需自动增加;扩容的等比因子默认2.0,可以在构造时指定这个因子值;Enqueue和Dequeue方法;有对应泛型类。
(5)Stack(实现了ICollection和IEnumerable接口):FILO;容量按需自动增加;Push和Pop方法;有对应泛型类。
(6)BitArray(实现了ICollection和IEnumerable接口):二进制位集合,true(1)或false(0);调整集合大小只能通过Length设置实现;初始值均为false;支持各种位逻辑运算,两个该集合若长度不等会抛出异常。
(7)HashSet<T>(实现了ISet<T>接口):做高性能集合运算(交并差);值不能重复;容量按需增加;

4.迭代器

实现一个迭代器可以有两种方法:
(1)实现IEnumerable接口:
public  IEnumerable < T >  Iter
{
    get
    {
         foreach ( T item  in  Items)
        {
            yield  return  item;
        }
    }
}
(2)实现GetEnumerator方法:
public  IEnumerator < T >  GetEnumerator()
{
     foreach ( T item  in  Items)
    {
        yield  return  item;
    }
}

5.泛型集合接口的协变和逆变

(1)支持协变的接口:
IEnumerable<T>,IEnumerator<T>,IQueryable<T>,IGrouping<TKey, TElement>
可以添加继承自T类型的对象。
(2)支持逆变的接口:
IComparer<T>,IEqualityComparer<T>,IComparable<T> 
可以将T类型对象复制给一个T的继承类型对象。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值