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();
————————————————————————————————————————————