由于java不熟悉掐隐,可能有些地方寫(xiě)的不太好,希望各位大神指點(diǎn)驰怎,如果有任何疑問(wèn)歡迎來(lái)探討阐滩。
目標(biāo)只有代碼的部分,之后有時(shí)間會(huì)補(bǔ)充圖文县忌。
一個(gè)很蛋疼的問(wèn)題掂榔,java居然不支持泛型數(shù)組實(shí)例化,這個(gè)在c#中輕松編譯通過(guò)的芹枷。
package ListExercise;
import java.util.Arrays;
public class ArrayList<T> {
// 當(dāng)前數(shù)據(jù)域
private Object[] datas = null;
// 鏈表的長(zhǎng)度
private int length;
// 當(dāng)前下標(biāo)
private int curSize;
// 初始化數(shù)組長(zhǎng)度,默認(rèn)值為20
public ArrayList() {
this(20);
}
// 初始化數(shù)組長(zhǎng)度
public ArrayList(int initialSize) {
if (initialSize >= 0) {
this.length = initialSize;
this.datas = new Object[initialSize];
this.curSize = 0;
} else {
throw new RuntimeException("初始化大小不能小于0:" + initialSize);
}
}
// 添加元素
public boolean add(T data) {
return add(curSize, data);
}
// 按照位置添加元素
public boolean add(int index, T data) {
boolean ret = false;
checkArrayBorder(index);
if (isFull()) {
trimSize();
}
for (int i = curSize; i > index; i--) {
datas[i] = datas[i - 1];
}
datas[index] = data;
curSize++;
ret = true;
return ret;
}
// 刪除元素T
public boolean remove(T t) {
int index = 0;
for (int i = 0; i < datas.length; i++) {
if (datas[i] == t) {
index = i;
break;
}
}
return removeAt(index);
}
// 檢車數(shù)組是否越界
private void checkArrayBorder(int index) {
if (index < 0 || index > curSize) {
throw new RuntimeException("插入的長(zhǎng)度超出數(shù)據(jù)范圍:" + index);
}
}
// 刪除第index個(gè)元素 ,下標(biāo)從0開(kāi)始
public boolean removeAt(int index) {
boolean ret = false;
checkArrayBorder(index);
for (int i = index; i < curSize; i++) {
datas[i] = datas[i + 1];
}
datas[curSize] = null;
ret = true;
curSize--;
return ret;
}
// 獲取第index個(gè)元素
@SuppressWarnings("unchecked")
public T get(int index) {
return (T) datas[index];
}
// 監(jiān)測(cè)是否滿
public boolean isFull() {
return curSize == length;
}
// 當(dāng)前長(zhǎng)度
public int size() {
return curSize;
}
// 當(dāng)前數(shù)組是否為空
public boolean isEmpty() {
return curSize == 0;
}
// 數(shù)組擴(kuò)容
public void trimSize() {
length = length * 2;
datas = Arrays.copyOf(datas, length);
}
// 獲取總?cè)萘? public int getLength() {
return length;
}
// 打印當(dāng)前信息
public void print() {
for (int i = 0; i < curSize; i++) {
System.err.println(datas[i]);
}
}
}