C#-应该使用:数组与链表?
作者:互联网
我计划在不使用Queue< T>的情况下实现有界队列.类.在阅读了Arrays和LinkedList T的优缺点之后,我更倾向于使用Array来实现队列功能.集合将为固定大小.我只想从队列中添加和删除项目.
就像是
public class BoundedQueue<T>
{
private T[] queue;
int queueSize;
public BoundedQueue(int size)
{
this.queueSize = size;
queue = new T[size + 1];
}
}
代替
public class BoundedQueue<T>
{
private LinkedList<T> queue;
int queueSize;
public BoundedQueue(int size)
{
this.queueSize = size;
queue = new LinkedList<T>();
}
}
我之所以选择Array是因为效率高,而且集合的大小是固定的.想对此发表其他意见.谢谢.
解决方法:
您当然应该使用Queue< T> ;,但是在问题中您说您不想使用队列,而是自己实现队列.您首先需要考虑此类的用例.如果要快速实施某些操作,可以使用LinkedList< T>.但是对于通用库,您需要更快的速度.
您可以使用.NET Reflector了解如何在.NET中实现该功能.这些是其具有的字段:
private T[] _array;
private const int _DefaultCapacity = 4;
private static T[] _emptyArray;
private const int _GrowFactor = 200;
private int _head;
private const int _MinimumGrow = 4;
private const int _ShrinkThreshold = 0x20;
private int _size;
[NonSerialized]
private object _syncRoot;
private int _tail;
private int _version;
如您所见,它使用数组.对于涉及如何调整数组大小的许多字段,它也非常复杂.即使您实现的是有界数组,您也希望允许该数组的大小大于避免在内存中不断移动项目的容量.
关于线程安全,这两种类型都不提供任何保证.例如在LinkedList< T>的文档中.它说:
This type is not thread safe. If the LinkedList needs to be accessed by multiple threads, you will need to implement their own synchronization mechanism.
标签:data-structures,linked-list,arrays,c 来源: https://codeday.me/bug/20191106/1998893.html