1. 程式人生 > >java陣列的實現

java陣列的實現

 

動態陣列程式碼:

 


import java.util.Arrays;

public class Array<E> {
    private E[] data;
    private int size;

    //建構函式,傳入陣列的容量capacity的Array
    @SuppressWarnings("unchecked")
    public Array(int capacity){
        data = (E[]) new Object[capacity];
        size = 0;        
    }

    //午參建構函式,預設capacity為10
public Array(){ this(10); } //獲取陣列中元素個數 public int getSize(){ return size; } //獲取陣列的容量 public int getCapacity(){ return data.length; } //判斷陣列是否為空 public boolean isEmpty(){ return size == 0; } //在陣列下標為index的位置插入一個元素 public
void add(int index , E e)
{ if(index<0||index>size){ throw new IllegalArgumentException("add failed , required index > 0 and index < size"); } if(size == data.length){ resize(data.length * 2); } for(int i=size-1;i>index;i--){ data[i+1
] = data[i]; } data[index] = e; size++; } //向所有元素後新增一個新元素 public void addLast(E e){ add(size , e); } //向所有元素前新增一個新元素 public void addFirst(E e){ add(0 , e); } //獲取index索引位置的元素 public E get(int index){ if(index<0||index>=size){ throw new IllegalArgumentException("get failed , required index > 0 and index < size"); } return data[index]; } //修改索引index位置的元素為e public void set(int index, E e){ if(index<0||index>=size){ throw new IllegalArgumentException("set failed , required index > 0 and index < size"); } data[index] = e; } //判斷陣列中是否含有元素e public boolean contains(E e){ for(int i = 0;i<size;i++){ if(e.equals(data[i])){ return true; } } return false; } //查詢陣列中是否含有元素e,返回相應元素的下標 public int find(E e){ for(int i = 0;i<size;i++){ if(e.equals(data[i])){ return i; } } return -1; } //從陣列中刪掉相應下標的元素,返回刪掉的元素 public E remove(int index){ if(index<0||index>=size){ throw new IllegalArgumentException("remove failed , required index > 0 and index < size"); } E ret = data[index]; for(int i=index+1;i<size;i++){ data[i-1] = data[i]; } size--; data[size] = null; if(size == data.length/4 && data.length/2 != 0){ resize(data.length/2); } return ret; } //從陣列中刪掉第一個元素,返回刪掉的元素 public E removeFirst(){ return remove(0); } //從陣列中刪掉最後一個元素,返回刪掉的元素 public E removeLast(){ return remove(size-1); } //從陣列中刪掉元素e public void removeElement(E e){ int index = find(e); if(index != -1){ remove(index); } } @Override public String toString() { return "Array [data=" + Arrays.toString(data) + ", size=" + size +" Capacity="+data.length+ "]"; } //重新設定陣列容量 private void resize(int newCapacity){ @SuppressWarnings("unchecked") E[] newData = (E[]) new Object[newCapacity]; for(int i=0;i<size; i++){ newData[i] = data[i]; } data = newData; } }

 

測試程式碼:

 


public static void main(String args[]){

        Array<Integer> array = new Array<Integer>(10);

        for(int i =0;i<10;i++){
            array.add(i, i);
        }

        System.out.println(array.toString());
        array.add(10, 11);
        System.out.println(array.toString());
        array.remove(5);
        System.out.println(array.toString());
    }

 測試結果:

  • 在陣列容量已經滿了的時候再新增一個元素,會自動擴充容量;
  • 在陣列容量已經滿了的時候再新增一個元素,會自動擴充容量;