Страницы

Поиск по вопросам

четверг, 4 октября 2018 г.

Реализация своего ArrayList

Здравствуйте,есть задача написать свою коллекцию,но не понимаю как подойти к этому,как создать динамический массив в котором будут храниться все данные?


Ответ

Основные методы и логика масштабирования внутреннего массива в обе стороны:
public class MyArrayList { private final int INIT_SIZE = 16; private final int CUT_RATE = 4; private Object[] array = new Object[INIT_SIZE]; private int pointer = 0;
/* Добавляет новый элемент в список. При достижении размера внутреннего массива происходит его увеличение в два раза. */ public void add(T item) { if(pointer == array.length-1) resize(array.length*2); // увеличу в 2 раза, если достигли границ array[pointer++] = item; }
/* Возвращает элемент списка по индексу. */ public T get(int index) { return (T) array[index]; }
/* Удаляет элемент списка по индексу. Все элементы справа от удаляемого перемещаются на шаг налево. Если после удаления элемента количество элементов стало в CUT_RATE раз меньше чем размер внутреннего массива, то внутренний массив уменьшается в два раза, для экономии занимаемого места. */ public void remove(int index) { for (int i = index; i INIT_SIZE && pointer < array.length / CUT_RATE) resize(array.length/2); // если элементов в CUT_RATE раз меньше чем // длина массива, то уменьшу в два раза } /*Возвращает количество элементов в списке*/ public int size() { return pointer; }
/*Вспомогательный метод для масштабирования.*/ private void resize(int newLength) { Object[] newArray = new Object[newLength]; System.arraycopy(array, 0, newArray, 0, pointer); array = newArray; } }

Комментариев нет:

Отправить комментарий