语言学习
自定义ArrayList
public class TestArrayList03<E>{
private Object[] elementData;
private int size;
private static final int DEFAULT_CAPACITY = 10;
public TestArrayList03(){
this.elementData = new Object[DEFAULT_CAPACITY];
}
public TestArrayList03(int capacity){
if(capacity < 0){
throw new RuntimeException("数组索引不能为负数");
}else if(capacity == 0){
this.elementData = new Object[DEFAULT_CAPACITY];
}else{
this.elementData = new Object[capacity];
}
}
@Override
public String toString() {
StringBuilder str = new StringBuilder();
str.append("[");
for (int i = 0; i < size; i++) {
if(size - 1 == i){
str.append(this.elementData[i] + "]");
}else{
str.append(this.elementData[i] + ", ");
}
}
return str.toString();
}
public void add(E e){
if(size == elementData.length){
Object[] newArray = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData,0,newArray,0,elementData.length);
elementData = newArray;
}
this.elementData[size++] = e;
}
public E get(int index){
return (E) elementData[index];
}
public void set(E e,int index){
checkIndex(index);
elementData[index] = e;
}
public void checkIndex(int index){
if(index < 0 || index > size - 1){
throw new IndexOutOfBoundsException("索引超出范围" );
}
}
public E remove(int index){
int len = elementData.length - index - 1;
checkIndex(index);
E e = (E) elementData[index];
Object[] newArray = elementData;
System.arraycopy(elementData,index + 1,newArray,index,len);
newArray[elementData.length - 1] = null;
this.elementData = newArray;
size--;
return e;
}
public boolean remove(E e){
for (int i = 0; i < size; i++) {
if(elementData[i].equals(e)){
remove(i);
return true;
}
}
return false;
}
public static void main(String[] args) {
TestArrayList03<String> tArray = new TestArrayList03<>();
for (int i = 0; i < 10; i++) {
tArray.add("梅" + i);
}
System.out.println(tArray);
tArray.remove("梅8");
System.out.println(tArray.toString());
}
}