手工实现ArrayList完善,两种remove方法的补充
package cn.com.collection;
public class TestMyCollection <T>{
private Object[] elementDate;
private int size;
private static final int DEFAULT_CAPACITY = 10;
public TestMyCollection() {
elementDate = new Object[DEFAULT_CAPACITY];
}
public TestMyCollection(int capacity) {
if (capacity < 0 ) {
throw new RuntimeException("容器的容量不能为负数");
}else if (capacity == 0 ) {
elementDate = new Object[DEFAULT_CAPACITY];
}else {
elementDate = new Object[capacity];
}
elementDate = new Object[capacity];
}
public void add(T obj) {
//扩容
if (size == elementDate.length) {
Object[] newArray = new Object[
elementDate.length+(elementDate.length>>1)];
System.arraycopy(
elementDate,0,newArray,0,elementDate.length);
elementDate = newArray;
}
elementDate[size++] = obj;
}
public T get(int index) {
checkRange(index);
return (T)elementDate[index];
}
public void set(T element,int index) {
checkRange(index);
elementDate[index] = element;
}
public void checkRange(int index) {
if (index <0 || index > size -1) {
throw new RuntimeException("下标位置不合法:"+index);
}
}
public void remove(T element) {
for (int i = 0; i <size ; i++) {
if (element.equals(get(i))) {
remove(i);
}
}
}
public int size() {
return size;
}
public boolean isEmpty() {
return size == 0?true:false;
}
public void remove(int index) {
int numMoved = elementDate.length - index -1;
if (numMoved> 0) {
System.arraycopy(elementDate,index+1,elementDate,index,numMoved);
}
elementDate[--size] = null;
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i <size ; i++) {
sb.append(elementDate[i]+",");
}
sb.setCharAt(sb.length()-1,']');
return sb.toString();
}
public static void main(String[] args) {
TestMyCollection ts = new TestMyCollection();
for (int i = 0; i <40; i++) {
ts.add("小明"+i);
}
ts.set("小军",3);
System.out.println(ts);
System.out.println(ts.get(39));
ts.remove(3);
ts.remove(15);
System.out.println(ts);
System.out.println(ts.size);
System.out.println(ts.isEmpty());
}
}