Dynamic Array Implementation in Java
来源:互联网 发布:品牌十大评选网络投票 编辑:程序博客网 时间:2024/05/05 10:40
package test.dynamic.array; import java.util.*; public class DynamicArray<T> { private static final int INIT_SIZE = 1; private T[] array; // the internal array private int size = 0; // number of elements in dynamic array private static final double LOAD_FACTOR = 2.0; // Load factor used for array resizing public DynamicArray(){ array = (T[]) new Object[INIT_SIZE]; } // return the size of array public int size(){ return size; } // is the array empty public boolean isEmpty(){ return size() == 0; } // resize the array with capacity size private void resize(int capacity){ T[] temp = (T[]) new Object[capacity]; for(int i = 0; i < size; i++){ temp[i] = array[i]; } array = temp; } // add an element to the array public void add(T elem){ if(size >= array.length){ resize((int)LOAD_FACTOR * size); } array[size++] = elem; } // remove an element public void remove(T elem){ int pos = find(elem); if(pos != -1){ array[pos] = array[size - 1]; array[size - 1] = null; size--; } int newsize = (int)(array.length / (LOAD_FACTOR)); if(size <= newsize + 1){ resize(newsize + 1); } } // find the element in the array and return it's position public int find(T elem){ for(int i = 0; i < size; i++){ if(array[i] == elem){ return i; } } return -1; } public Iterable<T> elements() { Queue<T> queue = new LinkedList<T>(); for (int i = 0; i < size; i++) queue.add(array[i]); return queue; } public void print(){ for(int i = 0; i < size; i++){ System.out.print(array[i] + " "); } System.out.print("array.length : " + array.length + " size is : " + size); System.out.println(); } /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub DynamicArray<Integer> da = new DynamicArray<Integer>(); for(int i = 0; i < 10; i++){ da.add(i); } da.print(); da.remove(2); da.print(); da.remove(4); da.print(); da.remove(6); da.print(); da.remove(8); da.print(); da.remove(0); da.print(); } }