接口
public interface MyList<T> {
int size();
boolean add(T o);
void add(int index,T o);
T remove(int index);
T get(int index);
boolean isEmpty();
}
实现类
public class MyArrayList<T> implements MyList<T> {
Object[] arr ={};
int size = 0;
@Override
public int size() {
return size;
}
@Override
public boolean add(T o) {
expansion(size+1);
arr[size] = o;
size++;
return true;
}
private void expansion(int i) {
int length = arr.length;
if (length==0){
arr = new Object[10];
}else if(i>length){
length = length + (length>>1);
Object[] newArray = new Object[length];
for (int j = 0; j < size; j++) {
newArray[j] = arr[j];
}
arr = newArray;
}
}
@Override
public void add(int index, T o) {
size++;
this.check(index);
expansion(size);
this.shift(index, false);
arr[index] = o;
}
@Override
public T remove(int index) {
this.check(index);
T old = this.get(index);
this.shift(index,true);
size--;
return old;
}
@Override
public T get(int index) {
this.check(index);
return (T) arr[index];
}
private void check(int index) {
if (index<0||index>=size){
throw new RuntimeException("index超出长度");
}
}
@Override
public boolean isEmpty() {
return size==0;
}
/**
* index之前的元素不动,index之后的元素向左或向右移动
* @param index
* @param left
*/
private void shift(int index,Boolean left){
if (left){
for (int i = index+1; i <size; i++) {
arr[i-1] = arr[i];
}
}else {
for (int i = size-1; i >index; i--) {
arr[i+1] = arr[i];
}
}
}
@Override
public String toString() {
StringBuilder stringBuilder = new StringBuilder("[");
for (int i = 0; i < size; i++) {
if (i==size-1){
stringBuilder.append(arr[i]).append("]");
break;
}
stringBuilder.append(arr[i]).append(",");
}
return stringBuilder.toString();
}
}
测试
public class TestMyClass {
public static void main(String[] args) {
MyList<Integer> list = new MyArrayList<>();
for (int i = 0; i < 103; i++) {
list.add(i);
}
System.out.println(list);
Integer remove = list.remove(5);
System.out.println(remove);
Integer remove1 = list.remove(33);
System.out.println(remove1);
Integer remove2 = list.remove(88);
System.out.println(remove2);
System.out.println(list);
System.out.println(list.size());
}
}
只实现了基本的功能及扩容