编程语言
首页 > 编程语言> > C#-应该使用:数组与链表?

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&gt ;,但是在问题中您说您不想使用队列,而是自己实现队列.您首先需要考虑此类的用例.如果要快速实施某些操作,可以使用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