C#集合基础与运用
1. 集合接口与集合类型 1
(1) 集合的命名空间 2
(2) 集合接口介绍 2
1、 IEnumerable与IEnumerator接口 2
2、 集合和列表实现的接口表 2
2. 集合的基本操作 2
(1) 创建集合 2
(2) 添加元素 3
(3) 插入元素 3
(4) 访问元素 3
(5) 删除元素 4
(6) 搜索元素 4
(7) 元素排序 4
(8) 类型转换 4
(9) 只读集合 5
(10) 集合常用的扩展方法(常用) 5
3. 常见集合的特性 5
(1) 非泛型集合对应的泛型集合 5
(2) 队列(Queue<T>) 5
(3) 栈(Stack<T>) 6
(4) 链表(LinkedList<T>) 7
(5) 有序列表(SortedList<K,V>) 7
(6) 字典 8
1、 Dictionary<K,V> 8
2、 Lookup<K,V> 8
3、 SortedDictionary<K,V> 8
(7) 集(ISet<T>接口) 8
4. 可观察的集合(深入) 8
(1) ObservableCollection<T>类简介 8
(2) 使用示例 8
5. 位数组(深入) 9
(1) BitArray、BitVector32介绍 9
(2) BitArray 9
(3) BitVector32 10
6. 并发集合(.NET 4新增) 10
(1) ConcurrentQueue<T> 10
(2) ConcurrentStack<T> 10
(3) ConcurrentBag<T> 10
(4) ConcurrentDictionary<K, V> 10
(5) BlockingCollection<T> 10
7. 不同集合类的性能 10
作者:李志伟
时间:2014-01-23
1.集合接口与集合类型
(1)集合的命名空间
大多数集合类都可以在System.Collections和System.Collections.Generic名称空间中到。泛型集合位于System.Collections.Generic名称空间中;专用于特定类型的集合类位于System.Collections.Specialized名称空间中;线程安全的集合位于System.Collections.Concurrent名称空间中。
(2)集合接口介绍
1、IEnumerable与IEnumerator接口
其实IEnumerable接口是非常的简单,只包含一个抽象的方法GetEnumerator(),它返回一个可用于循环访问集合的IEnumerator对象。
public interface IEnumerable
{
IEnumerator GetEnumerator();
}
IEnumerator对象有什么呢?它是一个真正的集合访问器,没有它,就不能使用foreach语句遍历集合或数组,因为只有IEnumerator对象才能访问集合中的项。IEnumerator接口定义了:一个Current属性用来获取当前集合中的项;MoveNext方法将游标的内部位置向前移动;Reset方法将枚举数设置为其初始位置,该位置位于集合中第一个元素之前。
public interface IEnumerator
{
object Current { get; }
bool MoveNext();
void Reset();
}
一个collection要支持foreach进行遍历,就必须实现IEnumerable,并以某种方式返回迭代器对象:IEnumerator。
2、集合和列表实现的接口表
接口 | 说明 |
IEnumerable<T> | 如果foreach语句用于集合,就需要此接口。 |
ICollection<T> | 此集合定义了Count属性、CopyTo、Add、Remove、Clear方法 |
IList<T> | 可以通过位置访问几何元素 |
ISet<T> | 此集合不允许有重复的元素 |
IDictionary<K,V> | 含有键值对的集合 |
ILookup<K,V> | 含有键值对的集合,但可以通过一个键包含多个值 |
IComparer<T> | 集合元素比较器,用于集合元素的排序 |
IEqualityComparer<T> | 用于字典集合的比较器 |
IProducerConsumerCollection<T> | 线程安全的集合 |
2.集合的基本操作
(1)创建集合
使用默认的构造函数创建一个空集合,元素添加到集合之后,集合的容量就会扩大为4。当集合的容量被使用完,且还在向集合中添加元素时,集合的容量就会扩大成原来的2倍!可使用Capacity属性设置或访问集合的容量,使用Count属性访问集合的元素个数。也可使用TrimExcess方法调整集合容量,节省内存!
class Program
{
static void Main(string[] args)
{
List<int> list = new List<int>();//List<int> list = new List<int>(3)
for (int i = 0; i < 1025; i++)
{
if (list.Count == (list.Capacity))
{
Console.WriteLine("容量使用量:"+list.Count + "/" + list.Capacity);
}
list.Add(i);
}
Console.WriteLine("容量使用量:" + list.Count + "/" + list.Capacity);
list.TrimExcess();//调整容量
Console.WriteLine("容量使用量:" + list.Count + "/" + list.Capacity);
Console.Read();
}
}
创建集合时可以为集合设置初始值,如下:
List<int> list = new List<int>() { 1,2,3,4,5,6,7,8,9,0};
List<string> list = new List<int>() { "aa", "bb", "cc" };
(2)添加元素
为集合添加元素可使用Add方法,还可以使用AddRange方法一次添加多个元素,因为AddRange方法的参数是IEnumerable<T>类型的对象,所以可以添加数组到集合里。
class Program
{
static void Main(string[] args)
{sortedlist
List<string> list = new List<string>();
list.AddRange(new string[]{"aa","bb","cc"});//添加数组
list.AddRange(list);//添加集合
foreach (string s in list)
{
Console.WriteLine(s);
}
Console.Read();
}
}
(3)插入元素
插入元素可以使用Insert方法,同样使用InsertRange方法插入多个元素,与AddRange方法类似。
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>() { "aa", "bb", "ff" };
list.Insert(2, "cc");//插入元素
list.InsertRange(3, new string[] { "dd", "ee" });//插入集合
foreach (string s in list)
{
Console.WriteLine(s);
}
Console.Read();
}
}
(4)访问元素
可以使用索引器访问集合中某个位置的元素,例如:
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>() { "aa", "bb", "cc" };
Console.WriteLine(list[1]);//访问第1个位置上的元素,下标从0开始
Console.Read();
}
}
集合的遍历,除了使用foreach外,还可以使用集合的Foreach方法,该方法的参数是一个Action<T>委托类型,可以使用Lambda表达式。例如:
class Program
{
static void Main(string[] args)
{
List<string> list = new List<string>() { "aa", "bb", "cc" };
list.ForEach(temp => Console.WriteLine("元素:" + temp));
//也可使用: list.ForEach(Console.WriteLine);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论