C#中的集合
2016-03-19 12:59
423 查看
ArrayList(不是集合) 和 List<T> (这个是集合) 使用Cast函数互转
[/code]重要语句:实现了IList<T>接口可以实现索引,实现了IEnumerable接口可以实现迭代(用foreach循环)
[/code]
[/code]
[/code]
基于哈希的查询使得Contains执行非常快速
两个集合都不存储重复的元素,如果试图添加重复元素会自动忽略
不能通过位置(索引)获取元素
SortedSet<T>的元素是排过序的,而HashSet<T>的元素未排序。
[/code]
来自为知笔记(Wiz)
ArrayList al = new ArrayList();
al.AddRange(new[] { 1, 5, 9 });
List<int> list = al.Cast<int>().ToList(); // cast是IE<T>的扩展方法,ToList()方法将IE<T>转换为List<T>集合
[/code]重要语句:实现了IList<T>接口可以实现索引,实现了IEnumerable接口可以实现迭代(用foreach循环)
Queue<T>和Queue
Queue<T>和Queue是先进先出(FIFO)的数据结构,通过Enqueue和Dequeue方法实现添加元素到队列的尾部和从队列的头部移除元素。Peek方法从队列的头部获取一个元素(不移除该元素),Count属性用来统计队列中元素的个数(在执行出列操作时检查元素是否存在非常有用)。尽管队列是可遍历的,但是它们并没有实现IList<T>接口和IList接口,因此也不能通过索引来访问队列中的元素。虽然也提供了ToArray方法,但是在复制元素时是从队列中随机读取的。Queue qq = new Queue();
qq.Enqueue(10);
qq.Enqueue(22);
Console.WriteLine(qq.Count);
Console.WriteLine(qq.Peek()); // 弹出第一个数组元素
Console.WriteLine(qq.Dequeue()); // 从queue头移除对象
Console.WriteLine(qq.Peek()); // 返回第一个元素但不移除
var i = qq.ToArray(); // 返回的是object[] 数组
Console.WriteLine(i.GetType());
Console.ReadKey();
[/code]
Stack<T>和Stack
Stack<T>和Stack则是后进先出的数据结构,通过Push和Pop法实现添加元素到队列的顶部和从队列的顶部移除元素。同样也提供了Peek方法、Count属性和ToArray方法Stack ss = new Stack();
ss.Push(1);
ss.Push(2);
ss.Push("jingya");
Console.WriteLine(ss.Count);
Console.WriteLine(ss.Peek());
ss.Pop();
Console.WriteLine(ss.Peek());
Console.ReadKey();
[/code]
BitArray
BitArray是一个都bool值组成的、大小可动态变化的集合。它比bool[]或List<bool>有更多的内存效率,这是因为每个元素都值占用一bit的内存空间,而bool类型则占用1byte空间(1byte=8bit)。通过索引器可以读取和更改BitArray元素的值。BitArray提供了四个位运算(Add, Or, Xor和Not)。最后最后一个方法之外,其他的三个方法接收另外一个BitArray,与 或 异或 非 的功能能实现非常复杂的逻辑运算的操作BitArray array1 = new BitArray(new[] { true, false, false, true, true });
BitArray array2 = new BitArray(new[] { true, false, true, false, false });
Console.WriteLine("--Or--");
foreach (bool b in array1.Or(array2))
Console.WriteLine(b);
array1 = new BitArray(new[] { true, false, false, true, true });
array2 = new BitArray(new[] { true, false, true, false, false });
Console.WriteLine("\n--And--");
foreach (bool b in array1.And(array2))
Console.WriteLine(b);
array1 = new BitArray(new[] { true, false, false, true, true });
array2 = new BitArray(new[] { true, false, true, false, false });
Console.WriteLine("\n--Xor--");
foreach (bool b in array1.Xor(array2))
Console.WriteLine(b);
Console.ReadLine();
[/code]
HasSet<T>和SortedSet<T>
HashSet<T>在Framework3.5才新增的,而SortedSet<T>是Framework4.0新增的。两者都有下面的特性基于哈希的查询使得Contains执行非常快速
两个集合都不存储重复的元素,如果试图添加重复元素会自动忽略
不能通过位置(索引)获取元素
SortedSet<T>的元素是排过序的,而HashSet<T>的元素未排序。
int[] ii = { 1, 1, 7, 4, 3, 2, 1, 3, 2, 3, 4, 5, 6, 7, 7, 8 ,45, 1 };
HashSet<int> set = new HashSet<int>();
foreach (var item in ii)
{
set.Add(item);
}
Console.WriteLine(set.Count()); // 统计出不重复的数字有多少个
foreach (var item in set)
{
Console.Write(" "+item);
}
SortedSet<int> sort_set = new SortedSet<int>(); // 这个自动在内部排序,输出是从小到大的排列
foreach (var item in ii)
{
sort_set.Add(item);
}
foreach (var item in sort_set)
{
Console.Write(" "+ item);
}
Console.ReadKey();
[/code]
来自为知笔记(Wiz)
相关文章推荐
- C#中的LINQ 基础
- C#中的数组
- C#中的public protected internal private
- C#中的Attribute定义及用法
- c#中的泛型
- C# 在第二个窗体上添加数据之后如何刷新第一个窗体加载的数据
- 假定已经获取题库中的试题号抽取n题组成考题字符串
- C# 第一个窗体的数据传递到第二个窗体上应用
- C#创建Windows服务入门图解(VS2010)
- C# 关闭当前窗体开启一个新的窗体
- C#代码覆盖率实践-vsinstr和OpenCover
- C#调用Win32 api学习总结
- C#程序开发中经常遇到的10条实用的代码
- C#: 过程或函数""需要""参数,但未提供该参数
- C#上机实验(三)
- (转)C# 温故而知新:Stream篇(—)
- 3.C#多线程补充(委托Delegate)
- c#代码分析
- 使用C#得到操作系统,CLR版本和ServicePack信息
- C#编程基础 实验(3),