c#集合类汇总(上)
来源:互联网 发布:计算圆周率算法 编辑:程序博客网 时间:2024/06/05 15:44
其实一直想把几个集合类分清楚,哪些可放重复元素,哪些效率高,排序等等。
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。重复元素被删除,且输出排序。
摘自网上的一段说明:
- HashSet和SortSet主要的作用是用来进行,两个集合求交集、并集、差集等运算.集合中包含一组不重复出现且无特性顺序的元素。前者不会自动排序,后者会加入元素后,自动排序。
- 两者都无法从特定位置访问其中某个元素。
- 可以使用其查找功能:
Set.Contains("value"); 返回true或false。
- 对集合做操作:
- SymmetricExceptWith: 仅包含该对象或指定集合中存在的元素(但不可同时包含两者中的元素)。去除交集,剩下两个集合元素
- UnionWith: 包含该对象本身和指定集合中存在的所有元素。并集
- ExceptWith: 从当前 HashSet<T> 对象中移除指定集合中的所有元素。差集
- IntersectWith: 仅包含该对象和指定集合中存在的元素。交集
5.SortedSet对象,可以调用GetViewBetween、Max、Min 方法。
6.除了SortedSet外,System.Collections.Generic命名空间下,还提供了SortedDictionary和SortedList两个类。
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
- c#集合类汇总(上)
- c#集合类汇总(下)
- 集合类(上)
- JAVA集合(容器)类知识点汇总
- Java集合类汇总
- Java_集合类汇总
- Java 集合类汇总
- JAVA集合类汇总
- JAVA-集合类汇总
- Java集合类汇总
- JAVA集合类汇总
- JAVA集合类汇总
- JAVA集合类汇总
- JAVA集合类汇总
- JAVA集合类汇总
- JAVA集合类汇总
- Java集合类汇总
- JAVA集合类汇总
- 在《Android PorterDuff.Mode图形混合处理 》这篇博客中,我们讲解了PorterDuff.Mode对图形混合的处理。这篇我们将通过图形混合的原理,来制作一个手动擦除蒙版显示底层图片
- hello spring
- Java – Convert String to int
- ListView 显示不同布局
- 智能指针 weak_ptr
- c#集合类汇总(上)
- 点击cell,在cell下方创建一个新的cell,再次点击,删除该cell
- 04概要设计说明书
- Switch能否用string做参数?
- leetcode之路050 Pow(x, n)
- ycmsmocbpbgq
- 写下常用的正则(regular expression)
- pm2.5接口,城市pm2.5指数查询接口调用代码示例
- arm+linux交叉编译libxml2