ArrayList

来源:互联网 发布:淘宝导航栏代码生成器 编辑:程序博客网 时间:2024/06/05 20:13

在java中ArrayList是通过数组的形式实现的,其保持了基础数组,数组的容量,以及存储在ArrayList中的当前项数。如果在表的末端进行增加或删除元素,则ArrayList所花费的时间较少,如果要再表的中间插入或删除元素则花费时间较长(由于数组要扩容,缩容),在查询时效率也比较高

public class MyArrayList<T> implements Iterable<T>{private T[] item;private static final int DEFAULT_CAPACITY = 10;private int size;public int size(){return size;}private void doClear(){this.size = 0;ensureCapacity(DEFAULT_CAPACITY);}/** * 此方法用于确定list的容量 * @param newCapacity */public void ensureCapacity(int newCapacity){if(newCapacity < size){return;}T[] old = item;item = (T[]) new Object[newCapacity];for(int i=0;i<size();i++){item[i] = old[i];}}public MyArrayList(){doClear();}public MyArrayList(int capacity){doClear();ensureCapacity(capacity);}public boolean isEmpty(){return size()==0;}public void add(int index,T element){if(index<0 || index > size){throw new ArrayIndexOutOfBoundsException();}if(item.length == size){ensureCapacity(size*2+1);}for(int i=size;i>index;i--){item[i] = item[i-1];}item[index] = element;size++;}public boolean add(T element){add(size,element);return true;}public T get(int index){if(index<0 || index>=size){throw new ArrayIndexOutOfBoundsException();}return item[index];}public T set(int index,T element){if(index<0 || index>=size){throw new ArrayIndexOutOfBoundsException();}T old = item[index];item[index] = element;return old;}public T remove(int index){if(index<0 || index>=size){throw new ArrayIndexOutOfBoundsException();}T moved = item[index];for(int i=size-1;i>index;i++){item[i-1] = item[i];}size--;return moved;}public void trimToSize(){ensureCapacity(size);}@Overridepublic Iterator<T> iterator() {return new ArrayListIterator();}private class ArrayListIterator implements Iterator<T>{private int currentIndex = 0;@Overridepublic boolean hasNext() {return currentIndex<size;}@Overridepublic T next() {if(!hasNext()){throw new NoSuchElementException();}return item[currentIndex++];}public void remove(){MyArrayList.this.remove(--currentIndex);}}}


0 0