Автор оригинала: Pankaj Kumar.
ArrayList-самая популярная реализация List в java .
ArrayList очень похож на массив, но обеспечивает функцию динамического распределения пространства при увеличении числа объектов в списке.
В массиве мы должны указать размер во время инициализации, но это не требуется для ArrayList.
На самом деле, когда вы инициализируете ArrayList, он автоматически присваивает своей начальной емкости значение 10.
Реализовать ArrayList с использованием массива
ArrayList реализован поверх массива. Здесь я пытаюсь реализовать пользовательский ArrayList с массивом и предоставить базовые функции, такие как get(индекс)
, add(объект)
и remove(индекс)
.
public class MyArrayList { private static final int SIZE_FACTOR=5; private Object data[]; private int index; private int size; public MyArrayList(){ this.data=new Object[SIZE_FACTOR]; this.size=SIZE_FACTOR; } public void add(Object obj){ System.out.println("index:"+this.index+"size:"+this.size+"data size:"+this.data.length); if(this.index==this.size-1){ //we need to increase the size of data[] increaseSizeAndReallocate(); } data[this.index]=obj; this.index++; } private void increaseSizeAndReallocate() { this.size=this.size+SIZE_FACTOR; Object newData[]=new Object[this.size]; for(int i=0; ithis.index-1){ throw new Exception("ArrayIndexOutOfBound"); } if(i<0){ throw new Exception("Negative Value"); } return this.data[i]; } public void remove(int i) throws Exception{ if(i>this.index-1){ throw new Exception("ArrayIndexOutOfBound"); } if(i<0){ throw new Exception("Negative Value"); } System.out.println("Object getting removed:"+this.data[i]); for(int x=i; x
Это базовая реализация ArrayList с использованием массива. Идея состоит в том, чтобы понять, как реализуется список массивов. В целях разработки используйте класс ArrayList из API коллекций.
Ниже приведен результат, полученный при выполнении вышеуказанной программы.
$ javac MyArrayList.java $ java MyArrayList index:0size:5data size:5 index:1size:5data size:5 index:2size:5data size:5 index:3size:5data size:5 index:4size:5data size:5 ***index:4size:10data size:10 index:5size:10data size:10 index:6size:10data size:10 index:7size:10data size:10 index:8size:10data size:10 index:9size:10data size:10 ***index:9size:15data size:15 Object getting removed:5 8 $
Рекомендации: