Write a simple ArrayList by imitating JDK -- ArrayList of Gao Qi JAVA300 lecture notes, and Gao Qi java300
Recently, I have watched the video of Gao Qi's 300 lecture. It's time to take notes.
ArrayList is a subclass of List. It is ordered and can be repeated. The underlying implementation is an array, the thread is not secure, and the efficiency is high. Fast query, slow modification, insertion, and deletion.
The following code implements the add (), set (), isEmpty (), remove (), get (), and size () Methods of ArrayList. When Moving Elements in the array, the static method arraycopy of java. lang. System class is used to copy the array.
Put the Code directly below.
Package cn. bjsxt. collection; import java. util. date;/*** implement an ArrayList * @ author **/public class SxtArrayList/* implements List */{private Object [] elementData; // private int size of an object array; // size of ArrayList // return the size of ArrayList public int size () {return size ;} // whether ArrayList is empty public boolean isEmpty () {return size = 0;} // No parameter constructor public SxtArrayList () {this (10 ); // The default container size is 10} // The constructor loads public SxtArrayList (int initialCapacity) {if (initialCapacity <0) {try {throw new Exception ();} catch (Exception e) {e. printStackTrace () ;}} elementData = new Object [initialCapacity];} // append an Object public void add (Object obj) {ensureCapacity (); // array expansion elementData [size ++] = obj;} // insert an Object public void add (int index, Object obj) {rangeCheck (index) at the specified position ); ensureCapacity (); // resize the array // move the array from the specified position to a System. arraycopy (elementData, index, elementData, index + 1, size-index); elementData [index] = obj; size ++ ;} // obtain the public Object get (int index) {rangeCheck (index) element at the specified position; // check if the array is out of bounds return elementData [index];} // Delete the object public void remove (int index) {rangeCheck (index); // check whether the array is out of bounds int numMoved = size-index-1; // The length of the element to be moved if (numMoved> 0) {// use the array COPY method to move the element following the specified position forward to a System. arraycopy (elementData, index + 1, elementData, index, numMoved);} elementData [-- size] = null; // make the last element of the array null} // remove the overloaded public void remove (Object obj) {for (int I = 0; I <size; I ++) {if (get (I ). equals (obj) {// note: the underlying method calls the equals method instead of = remove (I) ;}// replaces the element at a certain position, return the replaced public Object set (int index, Object obj) {rangeCheck (index); Object oldValue = elementData [index]; elementData [index] = obj; return oldValue;} private void ensureCapacity () {// array resizing and data copying if (size = elementData. length) {Object [] newArray = new Object [size * 2 + 1]; // create an array with a length of 2 times and 1 System. arraycopy (elementData, 0, newArray, 0, elementData. length); // copy the elements in the old array to the new array elementData = newArray;} // check whether the array is out of bounds private void rangeCheck (int index) {if (index <0 | index> = size) {try {throw new Exception ();} catch (Exception e) {e. printStackTrace () ;}} public static void main (String [] args) {SxtArrayList list = new SxtArrayList (3); list. add ("aaa"); list. add ("aaa"); list. add ("444"); list. add (new Date (); System. out. println (list. isEmpty (); System. out. println (list. size (); System. out. println (list. get (3); System. out. println ("replaced element:" + list. set (3, "345"); System. out. println ("the replaced element is:" + list. get (3); list. add (2, "abc"); System. out. println (list. get (2); list. remove (2); System. out. println ("####################################" ); for (int I = 0; I <list. size (); I ++) {System. out. println (list. get (I);} list. remove ("aaa"); System. out. println ("####################################" ); for (int I = 0; I <list. size (); I ++) {System. out. println (list. get (I ));}}}