C#--Linkeddlist类

105 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第20天,点击查看活动详情

Linkeddlist是一个C#为我们封装好的类,它的本质是一个可变类型的泛型双向链表,其元素指定前面和后面的元素。

链表的优点是:如果要插入一个元素到链表的中间位置,会非常的快。原因是,如果插入,只需要修改上一个元素的Next与下一个元素的Previous的引用则可。像ArrayList列表中,如果插入,需要移动其后的所有元素。链表的缺点是,链表只能是一个接着一个的访问,这样就要用较长的时间来查找定位位于链表中间的元素。

链表对象有两个类,一个是链表本身,一个是链表节点类LinkedListNode

LinkedListNode被LinkedList类包含,用LinkedListNode类,可以获得元素的上一个与下一个元素的引用

public class LinkedList : ICollection<T>, IEnumerable<T>, ICollection, IEnumerable, ISerializable, IDeserializationCallback{ 类体。。。}

上述可知,LinkedList继承了ICollection, IEnumerable, ICollection, IEnumerable, ISerializable, IDeserializationCallback接口。

LinkedList的继承关系:

public class LinkedList<E>

extends AbstractSequentialList<E>

implements List<E>, Deque<E>, Cloneable, java.io.Serializable

继承了AbstractSequentialList,本身和AbstractList没有什么区别,但是AbstractSequentialList完善了AbstractList中没有的功能,ArrayList继承之AbstractList,而AbstractSequentialList是AbstractList的子类,所以AbstractSequentialList就是对AbstractLIst中没有的功能进行完善。

其中的Cloneable和Serializable和ArrayList一样,都是标记接口,作用是标记可以复制克隆和序列化。

Deque:实现了Collection中的大家庭接口Queue队列接口。说明了它具有双端队列的功能(LinkedLIst和ArrayList的最大区别就是LinkedList实现了Deque接口,使的LinkedList具有了双端队列的功能)

简单介绍一下LinkedList类的方法与属性:

Count 返回链表中的元素个数

First 返回链表中的第一个节点,其返回的类型是一个节点类LinkedListNode,用它可以迭代集合中的其它节点

Last 返回最后一个节点

AddAfter() AddBefore() AddFirst() AddLast()

使用AddXXXX方法,可以在链表中添加元素分别是链表的头部与尾部,还有一个节点的前面与后面

Remove() RemoveFirst() RemoveLast() First与Last分别删除链表的头部元素与尾表元素 ,Remove是删除指定的一个匹配对像

Clear()清除所有的元素

Contains() 搜索一个元素,如果找到返回TRUE找不到返回FALSE

Find() 从链表头开始找一个元素,并返回他的节点类,LinkedListNode

FindLast() 与Find()类似,不同的是从尾部来搜