c#集合类汇总(上)

其实一直想把几个集合类分清楚,哪些可放重复元素,哪些效率高,排序等等。

1.ArrayList

 ArrayList arrayList = new ArrayList(9);
            arrayList.Add(1);
            arrayList.Add("a");
            arrayList.Add(1);
            arrayList.Add(null);
            arrayList.Add("");

1.1注意属性

capacity:获取或设置可包含的元素个数。

count:实际包含的元素个数。

如上诉例子,capacity=9,count=5。

如果初始化没有设置个数或者设置个数小于实际的元素数量,capacity就会成指数增长。

比如 ArrayList arrayList = new ArrayList(1); 那么capacity=2的3次方=8,直到大于实际元素个数5个。

可见,ArrayList元素是object类型,可存放重复和null元素,统计元素个数时,会将null也统计在内。

但是效率低,因为可存放object,操作时会涉及到频繁的装箱和拆箱。

2.List<T>

用得最多的就是这个了!因为是泛型,声明时必须制定存储的数据类型。

 List<string> list = new List<string>();
            list.Add("a");
            list.Add("b");
            list.Add("a");
            list.Add(null);
有序,可存放重复元素,可null。

3.HashSet<T>

hashset和list类似,不过前者不能存放重复元素,因为无序,所以不能用索引访问元素。

 HashSet<string> list = new HashSet<string>() { "a", "b", "c" };
            list.Add("a");
            list.Add(null);
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
输出:a,b,c

HashSet的Add方法其实是一个bool,如果元素重复返回false。

优点:HashSet检索性能高,单的说它的Contains方法的性能在大数据量时比List<T>好得多。HashSet<T>的Contains方法复杂度是O(1),List<T>的Contains方法复杂度是O(n)。

4.SortedSet<T>

无序,不包含重复元素

SortedSet<string> list = new SortedSet<string>(){ "a", "e", "c" };
            list.Add("d");
            list.Add("c");
            foreach (var item in list)
            {
                Console.WriteLine(item);
            }
输出a,c,d,e。重复元素被删除,且输出排序。

摘自网上的一段说明:

  1. HashSet和SortSet主要的作用是用来进行,两个集合求交集、并集、差集等运算.集合中包含一组不重复出现且无特性顺序的元素。前者不会自动排序,后者会加入元素后,自动排序
  2. 两者都无法从特定位置访问其中某个元素。
  3. 可以使用其查找功能:

    Set.Contains("value"); 返回true或false。

  4. 对集合做操作:
  • SymmetricExceptWith: 仅包含该对象或指定集合中存在的元素(但不可同时包含两者中的元素)。去除交集,剩下两个集合元素
  • UnionWith: 包含该对象本身和指定集合中存在的所有元素。并集
  • ExceptWith: 从当前 HashSet<T> 对象中移除指定集合中的所有元素。差集
  • IntersectWith: 仅包含该对象和指定集合中存在的元素。交集

     5.SortedSet对象,可以调用GetViewBetween、Max、Min 方法。

     6.除了SortedSet外,System.Collections.Generic命名空间下,还提供了SortedDictionarySortedList两个类。

5.Queue(队列)

无序,先进先出的集合,对尾插入,队首删除。

Queue queue = new Queue();
            queue.Enqueue(1);
            queue.Enqueue("a");
            queue.Enqueue(1);
            //var s = queue.Dequeue();
            //Console.WriteLine(s);
            foreach (var item in queue)
            {
                Console.WriteLine(item);
            }
遍历时,不会删除重复元素。

6.Stack(栈)

无序,先进后出

  Stack stack = new Stack();
            stack.Push("a");//进栈
            stack.Push(1);
            stack.Push("b");
            stack.Push(null);
            stack.Pop();//出栈
            //var s = queue.Dequeue();
            //Console.WriteLine(s);
            foreach (var item in stack)
            {
                Console.WriteLine(item);
            }
输出:b,1,a



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值