2007-12-26

介绍 .net 3.5新增的HashSet类

.net 3.5除了c#3.5,linq这些重大的变革之外,还增加了hashse类。HashSet是一个无序集合,集合里的元素不可重复,之所以用HashSet这个名称而不直接使用Set(有时候我们并不关心实现细节),是因为VB里面已经有了Set关键字。
它有List的便捷:
区别于dictionary的键值对模式,hashset仅仅用来保存值,这样就避免了如下代码:
Dictionary classes = new Dictionary();
classes.Add(”sdfsf”, null);
classes.Add(”sfsaf”, null);
foreach (var item in classes)
{
Console.WriteLine(item.Key);
}
又有Dictionary的高效。List的操作时O(n)级的,而hashset是O(1)。
除Add,Contains,Remove等基本操作之外,HashSet提供了更多的集合操作:
A.ExceptWith(B):从本集合中移除所有出现在另一集合中的元素,即A-B
A.IntersectWith(B):A ∩ B,交集
A.UnionWith(B):A ∪ B,并集
注意,以上方法(以及其他方法)都返回操作的hashset本身,而不会创建新的hashset
Overlaps(B): 是否有相同元素,A ∩ B 不为空时返回true

No comments: