package com.shixianjun;
@SuppressWarnings("unchecked")
public class ArrayList<E> {
private static final int DEFAULT_CAPACITY = 10;
private static final int ELEMENT_NOT_FOUND = -1;
private int size;
private E[] elements;
public ArrayList(){
this(DEFAULT_CAPACITY);
}
public ArrayList(int capacity){
capacity = capacity < DEFAULT_CAPACITY ? DEFAULT_CAPACITY : capacity;
elements = (E[]) new Object[capacity];
}
/// 數(shù)組大小
public int size() {
return size;
}
/// 是否為空
public boolean isEmpty() {
return size == 0;
}
/// 是否包含某元素
boolean contains(E element) {
return indexOf(element) != ELEMENT_NOT_FOUND;
}
/// 添加元素
void add(E element) {
this.add(size, element);
}
/// 返回index位置對應的元素
E get(int index) {
this.rangeCheck(index);
return elements[index];
}
/// 替換index位置的元素
E replace(int index, E element) {
this.rangeCheck(index);
E oldE = elements[index];
elements[index] = element;
return oldE;
}
// 向index位置添加元素
void add(int index, E element) {
this.rangeCheckForAdd(index);
this.ensureCapacity(size + 1);
for (int i = size; i > index; i--) elements[i] = elements[i - 1];
elements[index] = element;
size++;
}
/// 刪除index位置的元素
E remove(int index) {
this.rangeCheck(index);
E oldE = elements[index];
for (int i = index + 1; i < size; i++) {
elements[i-1] = elements[i];
}
elements[--size] = null;
return oldE;
}
/// 查看元素的位置
int indexOf(E element) {
if (element == null) {
for (int i = 0; i < size; i++) {
if (elements[i] == null) return i;
}
}else {
for (int i = 0; i < size; i++) {
if (element.equals(elements[i])) return i;
}
}
return ELEMENT_NOT_FOUND;
}
/// 清除所有元素
void clear() {
for (int i = 0; i < size; i++) elements[i] = null;
size = 0;
}
private void rangeCheck(int index) {
if (index < 0 || index >= size) outOfBounds(index);
}
private void rangeCheckForAdd(int index) {
if (index < 0 || index > size) outOfBounds(index);
}
private void outOfBounds(int index) {
throw new IndexOutOfBoundsException("index:" + index + ", size:" + size);
}
private void ensureCapacity(int capacity) {
int oldCapaticy = elements.length;
if (oldCapaticy >= capacity) return;
int newCapacity = oldCapaticy + oldCapaticy << 2;
E[] newElements = (E[]) new Object[newCapacity];
for (int i = 0; i < size; i++) {
newElements[i] = elements[i];
}
elements = newElements;
System.out.println(oldCapaticy + "擴容為" + newCapacity);
}
}
用Java實現(xiàn)一個動態(tài)數(shù)組
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。