[SerializableAttribute]
public class CircularList<T> : ISupportsRangeList<T>,
ISupportsRangeCollection<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IReadOnlyCollection<T>,
IList<T>, IReadOnlyList<T>, IList, ICollection
<SerializableAttribute>
Public Class CircularList(Of T)
Implements ISupportsRangeList(Of T), ISupportsRangeCollection(Of T),
ICollection(Of T), IEnumerable(Of T), IEnumerable, IReadOnlyCollection(Of T),
IList(Of T), IReadOnlyList(Of T), IList, ICollection
[SerializableAttribute]
generic<typename T>
public ref class CircularList : ISupportsRangeList<T>,
ISupportsRangeCollection<T>, ICollection<T>, IEnumerable<T>, IEnumerable, IReadOnlyCollection<T>,
IList<T>, IReadOnlyList<T>, IList, ICollection
[<SerializableAttribute>]
type CircularList<'T> =
class
interface ISupportsRangeList<'T>
interface ISupportsRangeCollection<'T>
interface ICollection<'T>
interface IEnumerable<'T>
interface IEnumerable
interface IReadOnlyCollection<'T>
interface IList<'T>
interface IReadOnlyList<'T>
interface IList
interface ICollection
end
Circularity means a dynamic start/end position in the internal store. If inserting/removing elements is required typically at the first/last position, then using CircularListT could be a good choice because these operations have an O(1) cost. Inserting/removing at other positions have generally O(n) cost, though these operations are optimized for not moving more than n/2 elements.
CircularListT is fully compatible with ListT as it implements all the public members of ListT.
CircularListT can be a good option instead of LinkedListT, too. Generally LinkedListT is considered to be a good choice when elements should be inserted/removed at the middle of the list. However, unless a direct reference is kept to a LinkedListNodeT to be removed or before/after which the new element has to be inserted, then the insert/remove operation will be very slow in LinkedListT, as it has no indexed access, and the node has to be located by iterating the elements. Therefore, in most cases CircularListT outperforms LinkedListT in most practical cases.
Adding elements to the first/last position are generally O(1) operations. If the capacity needs to be increased to accommodate the new element, adding becomes an O(n) operation, where n is Count. Though when elements are continuously added to the list, the amortized cost of adding methods (Add, AddLast, AddFirst or Insert at the first/last position) is O(1) due to the low frequency of increasing capacity. For example, when 20 million items are added to a CircularListT that was created by the default constructor, capacity is increased only 23 times.
Inserting more elements are also optimized. If the length of the CircularListT is n and the length of the collection to insert is m, then the cost of InsertRange to the first or last position is O(m). When the collection is inserted in the middle of the CircularListT, the cost is O(Max(n, m)), and in practice no more than n/2 elements are moved in the CircularListT. In contrast, inserting a collection into the first position of a ListT moves all the already existing elements. And if the collection to insert does not implement ICollectionT, then ListT works with an O(n * m) cost as it will insert the elements one by one, shifting the elements by 1 in every iteration.
CircularListT provides an O(1) solution also for emptying the collection: the Reset method clears all elements and resets the internal capacity to 0 in one quick step. The effect is the same as calling the Clear and TrimExcess methods in a row but the latter solution has an O(n) cost.
When a list is populated only by the Add method or by the indexer, and then it is never modified, ListT class can have a slightly better performance. Though when the list is enumerated as an IEnumerableT implementation (occurs for example, when the list is used in LINQ queries or when used as an IListT instance), then CircularListT can be a better choice than ListT because the enumerator of ListT class has worse performance when it is boxed into an IEnumeratorT reference. While the GetEnumerator method of CircularListT returns a value type enumerator (similarly to the ListT class), when the enumerator is obtained via the IEnumerableT interface, the CircularListT returns a reference type to avoid boxing and to provide a better performance.
CircularListT | Creates a new instance of CircularListT. |
CircularListT(IEnumerableT) | Creates a new instance of CircularListT with the elements of provided collection. |
CircularListT(Int32) | Creates a new instance of CircularListT that is empty and has the specified initial capacity. |
Capacity | Gets or sets the actual size of the internal storage of held elements. |
Count | Gets the number of elements contained in the list. |
Item | Gets or sets the element at the specified index. |
Add | Adds an item to the end of the CircularListT. |
AddFirst | Adds an item to the beginning of the CircularListT. |
AddLast | Adds an item to the end of the CircularListT. |
AddRange | Adds a collection to the end of the CircularListT. |
AsReadOnly | Returns a read-only IListT wrapper for the current collection. |
BinarySearch(T) | Searches the entire sorted list for an element using the default comparer and returns the zero-based index of the element. |
BinarySearch(T, IComparerT) | Searches the entire sorted CircularListT for an element using the specified comparer and returns the zero-based index of the element. |
BinarySearch(Int32, Int32, T, IComparerT) | Searches a range of elements in the sorted CircularListT for an element using the specified comparer and returns the zero-based index of the element. |
Clear | Removes all items from the CircularListT. |
Contains | Determines whether the list contains the specific item. |
ConvertAllTOutput | Converts the elements in the current list to another type, and returns a CircularListT containing the converted elements. |
CopyTo(T, Int32) | Copies the entire CircularListT to a compatible one-dimensional array, starting at a particular array index. |
CopyTo(Int32, T, Int32, Int32) | Copies a range of elements from the CircularListT to a compatible one-dimensional array, starting at the specified index of the target array. |
EnsureCapacity | Ensures that the Capacity of the CircularListT is at least the specified capacity. |
Exists | Determines whether the CircularListT contains elements that match the conditions defined by the specified predicate. |
Find | Searches for an element that matches the conditions defined by the specified predicate, and returns the first occurrence within the CircularListT. |
FindAll | Retrieves all the elements that match the conditions defined by the specified predicate. |
FindIndex(PredicateT) | Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the CircularListT. |
FindIndex(Int32, PredicateT) | Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the CircularListT that extends from the specified index to the last element. |
FindIndex(Int32, Int32, PredicateT) | Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the first occurrence within the range of elements in the CircularListT that starts at the specified index and contains the specified number of elements. |
FindLast | Searches for an element that matches the conditions defined by the specified predicate, and returns the last occurrence within the CircularListT. |
FindLastIndex(PredicateT) | Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the CircularListT. |
FindLastIndex(Int32, PredicateT) | Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the CircularListT that extends from the first element to the specified index. |
FindLastIndex(Int32, Int32, PredicateT) | Searches for an element that matches the conditions defined by the specified predicate, and returns the zero-based index of the last occurrence within the range of elements in the CircularListT that contains the specified number of elements and ends at the specified index. |
ForEach | Performs the specified action on each element of the CircularListT. |
GetEnumerator | Returns an enumerator that iterates through the CircularListT. |
GetRange | Creates a shallow copy of a range of elements in the source CircularListT. |
IndexOf(T) | Determines the index of a specific item in the CircularListT. |
IndexOf(T, Int32) | Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the CircularListT that extends from the specified index to the last element. |
IndexOf(T, Int32, Int32) | Searches for the specified object and returns the zero-based index of the first occurrence within the range of elements in the CircularListT that starts at the specified index and contains the specified number of elements. |
Insert | Inserts an item to the CircularListT at the specified index. |
InsertRange | Inserts a collection into the CircularListT at the specified index. |
LastIndexOf(T) | Determines the index of the last occurrence of a specific item in the CircularListT. |
LastIndexOf(T, Int32) | Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the CircularListT that extends from the first element to the specified index. |
LastIndexOf(T, Int32, Int32) | Searches for the specified object and returns the zero-based index of the last occurrence within the range of elements in the CircularListT that contains the specified number of elements and ends at the specified index. |
Remove | Removes the first occurrence of the specific item from the CircularListT. |
RemoveAll | Removes all the elements from the CircularListT that match the conditions defined by the specified predicate. |
RemoveAt | Removes the item from the CircularListT at the specified index. |
RemoveFirst | Removes the first element of the see CircularListT. |
RemoveLast | Removes the last element from the CircularListT. |
RemoveRange | Removes count amount of items from the CircularListT at the specified index. |
ReplaceRange | Removes count amount of items from the CircularListT at the specified index and inserts the specified collection at the same position. The number of elements in collection can be different from the amount of removed items. |
Reset | Removes all items from the list and resets the Capacity of the list to 0. |
Reverse | Reverses the order of the elements in the entire CircularListT. |
Reverse(Int32, Int32) | Reverses the order of the elements in the specified range. |
Slice(Int32) | Gets a new CircularListT instance, which represents a subsection of the current instance with the specified start index. |
Slice(Int32, Int32) | Gets a new CircularListT instance, which represents a subsection of the current instance with the specified start index and count. |
Sort | Sorts the elements in the entire CircularListT using the default comparer. |
Sort(ComparisonT) | Sorts the elements in the entire CircularListT using the specified ComparisonT. |
Sort(IComparerT) | Sorts the elements in the entire CircularListT using the specified comparer. |
Sort(Int32, Int32, IComparerT) | Sorts the elements in a range of elements in CircularListT using the specified comparer. |
ToArray | Copies the elements of the list to a new array. |
TrimExcess | Sets the capacity to the actual number of elements in the list, if that number (Count) is less than the 90 percent of Capacity. |
TrueForAll | Determines whether every element in the CircularListT matches the conditions defined by the specified predicate. |
AddRangeT |
Adds a collection to the target ICollectionT.
(Defined by CollectionExtensions) |
AsThreadSafeT |
Returns a LockingCollectionT, which provides a thread-safe wrapper for the specified collection.
This only means that if the members are accessed through the returned LockingCollectionT, then the inner state of the wrapped collection remains always consistent and not that all the multi-threading concerns can be ignored.
See the Remarks section of the LockingCollectionT class for details and some examples. (Defined by CollectionExtensions) |
AsThreadSafeT |
Returns a LockingListT, which provides a thread-safe wrapper for the specified list.
This only means that if the members are accessed through the returned LockingListT, then the inner state of the wrapped list remains always consistent and not that all the multi-threading concerns can be ignored.
See the Remarks section of the LockingListT class for details and some examples. (Defined by ListExtensions) |
Convert |
Converts an Object specified in the obj parameter to the desired targetType.
See the Examples section of the generic ConvertTTarget(Object, CultureInfo) overload for an example. (Defined by ObjectExtensions) |
ConvertTTarget |
Converts an Object specified in the obj parameter to the desired TTarget.
(Defined by ObjectExtensions) |
ForEachT |
Similarly to the List<T>.ForEach method, processes an action on each element of an enumerable collection.
(Defined by EnumerableExtensions) |
GetRandomElementT |
Gets a random element from the enumerable source using a new FastRandom instance.
(Defined by EnumerableExtensions) |
GetRandomElementT |
Gets a random element from the enumerable source using a specified Random instance.
(Defined by EnumerableExtensions) |
In |
Gets whether item is among the elements of set.
See the Examples section of the generic InT(T, T) overload for an example. (Defined by ObjectExtensions) |
IndexOf |
Searches for an element in the source enumeration where the specified predicate returns .
(Defined by EnumerableExtensions) |
IndexOf |
Searches for an element in the source enumeration.
(Defined by EnumerableExtensions) |
IndexOfT |
Searches for an element in the source enumeration.
(Defined by EnumerableExtensions) |
IndexOfT |
Searches for an element in the source enumeration where the specified predicate returns .
(Defined by EnumerableExtensions) |
InsertRangeT |
Inserts a collection into the target IListT.
(Defined by ListExtensions) |
IsNullOrEmpty |
Determines whether the specified source is or empty (has no elements).
(Defined by EnumerableExtensions) |
IsNullOrEmptyT |
Determines whether the specified source is or empty (has no elements).
(Defined by EnumerableExtensions) |
JoinT |
Concatenates the items of the source collection into a new string instance
using the specified separator between the items.
(Defined by EnumerableExtensions) |
JoinT |
Concatenates the items of the source collection into a new string instance
using the specified separator between the items.
(Defined by EnumerableExtensions) |
RemoveRangeT |
Removes count amount of items from the specified collection at the specified index.
(Defined by ListExtensions) |
ReplaceRangeT |
Removes count amount of items from the target IListT at the specified index, and
inserts the specified collection at the same position. The number of elements in collection can be different from the amount of removed items.
(Defined by ListExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using a new FastRandom instance.
(Defined by EnumerableExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using the provided seed with a new FastRandom instance.
(Defined by EnumerableExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using the provided seed with a new FastRandom instance.
(Defined by EnumerableExtensions) |
ShuffleT |
Shuffles an enumerable source (randomizes its elements) using a specified Random instance.
(Defined by EnumerableExtensions) |
ToCircularListT |
Creates a CircularListT from an IEnumerableT.
(Defined by EnumerableExtensions) |
ToStringKeyedDictionaryT |
Creates a StringKeyedDictionaryTValue from an IEnumerableT instance using the specified keySelector delegate and a comparer.
(Defined by EnumerableExtensions) |
ToStringKeyedDictionaryT, TValue |
Creates a StringKeyedDictionaryTValue from an IEnumerableT instance using the specified key and value selector delegates and a comparer.
(Defined by EnumerableExtensions) |
TryAdd |
Tries to add the specified item to the collection.
(Defined by EnumerableExtensions) |
TryAddT |
Tries to add the specified item to the collection.
(Defined by EnumerableExtensions) |
TryAddRange |
Tries to add the specified collection to the target collection.
(Defined by EnumerableExtensions) |
TryAddRangeT |
Tries to add the specified collection to the target collection.
(Defined by EnumerableExtensions) |
TryClear |
Tries to remove all elements from the collection.
(Defined by EnumerableExtensions) |
TryClearT |
Tries to remove all elements from the collection.
(Defined by EnumerableExtensions) |
TryConvert |
Tries to convert an Object specified in the obj parameter to the desired targetType.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryConvert |
Tries to convert an Object specified in the obj parameter to the desired targetType.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryConvertTTarget |
Tries to convert an Object specified in the obj parameter to the desired TTarget.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryConvertTTarget |
Tries to convert an Object specified in the obj parameter to the desired TTarget.
See the Examples section of the ConvertTTarget(Object, CultureInfo) method for a related example. (Defined by ObjectExtensions) |
TryGetCount |
Tries to get the number of elements in the source enumeration without enumerating it.
(Defined by EnumerableExtensions) |
TryGetCountT |
Tries to get the number of elements in the source enumeration without enumerating it.
(Defined by EnumerableExtensions) |
TryGetElementAt |
Tries to get an item at the specified index in the collection.
(Defined by EnumerableExtensions) |
TryGetElementAtT |
Tries to get an item at the specified index in the collection.
(Defined by EnumerableExtensions) |
TryInsert |
Tries to insert the specified item at the specified index to the collection.
(Defined by EnumerableExtensions) |
TryInsertT |
Tries to insert the specified item at the specified index to the collection.
(Defined by EnumerableExtensions) |
TryInsertRange |
Tries to insert the specified collection into the target collection.
(Defined by EnumerableExtensions) |
TryInsertRangeT |
Tries to insert the specified collection into the target collection.
(Defined by EnumerableExtensions) |
TryRemove |
Tries to remove the specified item from to the collection.
(Defined by EnumerableExtensions) |
TryRemoveT |
Tries to remove the specified item from to the collection.
(Defined by EnumerableExtensions) |
TryRemoveAt |
Tries to remove an item at the specified index from the collection.
(Defined by EnumerableExtensions) |
TryRemoveAtT |
Tries to remove an item at the specified index from the collection.
(Defined by EnumerableExtensions) |
TryRemoveRange |
Tries to remove count amount of items from the specified collection at the specified index.
(Defined by EnumerableExtensions) |
TryRemoveRangeT |
Tries to remove count amount of items from the specified collection at the specified index.
(Defined by EnumerableExtensions) |
TryReplaceRange |
Tries to remove count amount of items from the target at the specified index, and
to insert the specified collection at the same position. The number of elements in collection can be different from the amount of removed items.
(Defined by EnumerableExtensions) |
TryReplaceRangeT |
Tries to remove count amount of items from the target at the specified index, and
to insert the specified collection at the same position. The number of elements in collection can be different from the amount of removed items.
(Defined by EnumerableExtensions) |
TrySetElementAt |
Tries to set the specified item at the specified index in the collection.
(Defined by EnumerableExtensions) |
TrySetElementAtT |
Tries to set the specified item at the specified index in the collection.
(Defined by EnumerableExtensions) |