java陣列的實現
阿新 • • 發佈:2018-11-15
動態陣列程式碼:
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());
}
測試結果:
- 在陣列容量已經滿了的時候再新增一個元素,會自動擴充容量;
- 在陣列容量已經滿了的時候再新增一個元素,會自動擴充容量;