Требования к реализации:
Класс должен поддерживать все методы, что и ArrayList за исключением методов, обеспечивающих потокобезопасноть.
Также необходимо реализовать методы интерфейса IEnumerator(итератор) вашего ArrayList для того, чтобы он мог быть ипспользован в цикле foreach
В идеале в процессе разработки сразу писать к реализации тесты (см. задание 2) и проверять их проходимость во время разработки автоматически, вместо того чтобы запускать раз за разом какую-то внешнюю программу и выводить данные в консоль.
Каждый работает на своей ветке которая имеет название username/arraylist, пример:
knlod/arraylist
Методы и поля которые необходимо реализовать:
internal T[] array;
public int Capacity;
public int Count;
public bool IsReadOnly;
public T this[int index];
public ArrayList();
public ArrayList(int capacity);
public ArrayList(IEnumerable<T> collection);
public void Add(T item);
public void AddRange(IEnumerable<T> collection);
public void Insert(int index, T item);
public void InsertRange(int index, IEnumerable<T> collection);
public bool Remove(T item);
public void RemoveRange(int index, int count);
public void RemoveAt(int index);
public int IndexOf(T item);
public int LastIndexOf(T item);
public bool Contains(T item);
public void Clear();
public T[] ToArray();
public void CopyTo(T[] array, int arrayIndex;
public IEnumerator<T> GetEnumerator()
IEnumerator IEnumerable.GetEnumerator();
private void Resize(?);
Используемый инструмент: Microsoft.VisualStudio.TestTools.UnitTesting;
Пример теста:
using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using DSA.DataStructures.Lists;
using System.Linq;
namespace DSAUnitTests.DataStructures.Lists
{
[TestClass]
public class ArrayListTests
{
[TestMethod]
public void AddingItemsOneByOne()
{
var list = new ArrayList<int>();
int itemCount = 1000;
for (int i = 0; i < itemCount; i++)
{
list.Add(i);
}
int trueCount = 0;
int previousItem = int.MinValue;
foreach (var item in list)
{
if (previousItem > item) Assert.Fail();
previousItem = item;
trueCount++;
}
Assert.IsTrue(list.Count == itemCount
&& list.Count == trueCount);
}
Задание 1. Реализовать ArrayList
Требования к реализации: Класс должен поддерживать все методы, что и ArrayList за исключением методов, обеспечивающих потокобезопасноть. Также необходимо реализовать методы интерфейса IEnumerator(итератор) вашего ArrayList для того, чтобы он мог быть ипспользован в цикле foreach
В идеале в процессе разработки сразу писать к реализации тесты (см. задание 2) и проверять их проходимость во время разработки автоматически, вместо того чтобы запускать раз за разом какую-то внешнюю программу и выводить данные в консоль.
Каждый работает на своей ветке которая имеет название username/arraylist, пример: knlod/arraylist
Методы и поля которые необходимо реализовать:
Документация к ArrayList стандартной библиотеки: https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.arraylist?view=net-7.0
Интерфейс IList: https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.ilist?view=net-8.0
Интерфейс - IEnumerable, IEnumerator https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.ienumerable?view=net-8.0 https://learn.microsoft.com/ru-ru/dotnet/api/system.collections.ienumerator?view=net-8.0
Репозиторий с примерами структур данных на C#, если зайдете в тупик: https://github.com/abdonkov/DSA/tree/master
Информация про загадочную букву T которая является дженериком: https://learn.microsoft.com/ru-ru/dotnet/csharp/fundamentals/types/generics
Задание 2. Протестировать реализацию ArrayList
Используемый инструмент: Microsoft.VisualStudio.TestTools.UnitTesting; Пример теста: