zhouqijie

特殊集合

处理位的集合

处理位可以使用BitArray类和BitVector32结构。区别在于BitArray可以重新设置大小。而BitVector32基于栈,因此比较快。

BitArray bits = new BitArray();
//...
foreach(bool bit in bits)
{
    Write(bit ? 1 : 0);
}

改变时可以观察的集合

如果需要集合中的元素何时删除或添加的信息,就可以使用ObservableCollection<T>类。

最初是为WPF定义的,名称空间为System.Collections.ObjectModel。在dotNet Core中需要NuGet包System.ObjectModel。

不能改变的集合

使用不可变的集合,可以添加Nuget包System.Collections.Immutable。

ImmutableArray<string> a1 = Immutable.Create<string>();
ImmutableArray<string> a2 = a1.Add("XXX");
//Add方法不改变集合本身,而是返回一个新的不变的集合。    
//Add调用之后a1仍然是空集合,而a2是包含一个元素的不变集合。    

可以在多个线程中同时访问的集合

.NET在System.Collections.Concurrent中提供了几个线程安全的集合类。线程安全的集合类可以防止多个线程以相互冲突的方式访问集合。

(END)