C#泛型集合类(2)

来源:互联网 发布:破解加密压缩文件软件 编辑:程序博客网 时间:2024/06/16 02:16

LinkedList
双向有序链表。任何一端都可以进行插入和删除操作,并进行了优化。既可以作为栈,也可以作为队列,支持列表那样的随机访问。
链表中每一项除了含有数据本身之外,还含有对下一项的引用(Next属性)和上一项的引用(Previous属性),链表第一项的Previous属性值为null,链表的最后一项的Next属性值null。

AddFirst()方法可以在链表的开头插入元素,同时原来的第一项向后移动并将它的Previous属性设为插入新项的引用。
AddLast()方法可以在链表的最后插入一个元素,同时把原来最后一项的Next属性值设为新插入项的引用。
AddBefore()在指定项的前面插入一个数据
AddAfter()在指定项的后面插入一个数据。
First属性返回LinkedList的第一个项的引用;Last属性返回LinkedList最后一项的引用。

遍历链表可以从任何一端开始,不停查询Previous或者Next属性的引用,直到返回null值为止。
foreach语句遍历只能进行正向遍历,如果要进行反向遍历,考虑用for循环。
代码示例:

 LinkedList<int> IntLinkedList = new LinkedList<int>();//构建一个LinkedList实例            foreach (int num in ArrayList )            {                IntLinkedList.AddFirst(num);//利用AddFirst方法填充实例            }            IntLinkedList.AddFirst(100);//在开头添加100 AddFirst            IntLinkedList.AddLast(1000);//在尾部添加1000 AddLast            int eleFirst, eleLast;            eleFirst =((LinkedListNode <int>) IntLinkedList.First).Value ;//返回第一元素            eleLast = ((LinkedListNode<int>)IntLinkedList.Last).Value;//返回最后一个元素            Console.WriteLine(eleFirst);            Console.WriteLine(eleLast);            foreach (int num in IntLinkedList )//foreach进行正向遍历            {                Console.WriteLine(num);            }            for(LinkedListNode<int> node = IntLinkedList .Last;node !=null;node = node.Previous)//for循环进行反向遍历            //链表中的每一项都是一个LinkedListNode<T>节点,不能直接返回int值            //int element;            //element = IntLinkedList<T>.First;(这样是错误的)            {                int number = node.Value;//获取节点值                Console.WriteLine(number);            }            Console.ReadKey();

————————————————————————————————————————

HashSet:哈希表,无序的值列表,为数据的快速获取进行了优化。提供了方法判断一个哈希表是否是另一个哈希表的子集或者超集,可以计算不同哈希表的交集和并集等操作。
用Add方法进行元素的添加,用Remove方法进行元素的删除。HashSet的强大之处在于,可以使用IntersectWith,UnionWidth,ExpectWith方法,来修改HashSet的集合来生成与另一个HashSet的相交,并集,不包含其数据的新集合。上述操作是破坏性的,就是说,生成的新集合会覆盖原来的集合。

还可以使用IsSubsetOf,IsSupersetOf,IsProperSubsetOf,IsProperSupersetOf方法来判断一个HashSet是否是另一个HashSet的超集或子集。

代码示例:

            HashSet<string> employs = new HashSet<string>(new string[] { "YL", "PZP", "XT", "NLY" });//构建实例 employs            HashSet<string> CAE3D = new HashSet<string>(new string[] { "ZL", "KM", "GSY", "PZP" });//构建实例 CAE3D            employs.Add("WJL");//employs 用Add方法添加元素 WJL            CAE3D.Add("ZLF");//CAE3D用Add方法添加元素ZLF            foreach (string s in CAE3D )            {                Console.WriteLine(s);            }            Console.WriteLine("___________________________________________");            CAE3D.IntersectWith(employs);//利用IntersectWith方法求出CAE3D与employs的交集(PZP)            foreach (string s in CAE3D )            {                Console.WriteLine(s);            }            Console.ReadKey();

————————————————————————————————————————————