KNLOD / DSAInterns

0 stars 0 forks source link

Написать собственную реализацию ArrayList #1

Closed KNLOD closed 7 months ago

KNLOD commented 8 months ago

Задание 1. Реализовать ArrayList

Требования к реализации: Класс должен поддерживать все методы, что и 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(?);

Документация к 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; Пример теста:

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);
        }