一.List接口
1.特点
- 有序
- 有索引
- 可重复,元素可为null
- 底层用数组实现
2. ArrayList
2.1 实现
public class MyArrayList {
/**
* 定义数组,保存数据
*/
private Object[] objects = null;
/**
* 默认数组长度
*/
private final int DEFAULT_LENGTH = 10;
/**
* 数组长度
*/
private int length;
/**
* 数组元素个数
*/
private int size= 0;
/**
* 默认构造函数,创建数组
*/
private final int LOAD = 2;
public MyArray() {
length = DEFAULT_LENGTH;
objects = new Object[length];
}
/**
* 构造函数,根据用户传入长度创建数组
* @param length
*/
public MyArray(int length) {
this.length = length;
objects = new Object[length];
}
/**
* 向数组中添加元素
* @param o
*/
public void add(Object o) {
//判断是否需要扩容
if(size==length) {
//元素个数等于了数组长度,需要扩容
length = length*LOAD;
objects = Arrays.copyOf(objects,length);
}
objects[size]=o;
size++;
}
public void add(int index,Object o) {
if(index<0||index>size-1) {
throw new ArrayIndexOutOfBoundsException("访问越界");
}else {
//判断是否需要扩容
if(size==length) {
//元素个数等于了数组长度,需要扩容
length = length*LOAD;
objects = Arrays.copyOf(objects,length );
}
//先将index位置处的元素已近后面元素向右移动
System.arraycopy(objects, index, objects, index+1, size-index);
objects[index] = o;
size++;
}
}
/**
* 数组移除操作
* @param index
*/
public void remove(int index) {
if(index<0||index>size-1) {
throw new ArrayIndexOutOfBoundsException("访问越界");
}else {
objects[index]= null;
System.arraycopy(objects, index+1, objects,index , size-index);
size--;
}
}
/**
* 查找元素所在的位置
* @param o
* @return
*/
public int indexOf(Object o) {
// if(size==0) {
// return size;
// }else if(size==length) {
// return -1;
// }else if(size<length) {
// return size;
// }
if(o==null) {
return -1;
}
for (int i = 0; i < size; i++) {
Object object = objects[i];
if(o.equals(object)) {
return i;
}
}
return -1;
}
/**
* 是否包含某个元素
* @param o
* @return
*/
public boolean contains(Object o) {
int i = indexOf(o);
return i>=0?true:false;
}
/**
* 移除所有元素
*/
public void removeAll() {
Arrays.fill(objects, null);
size =0;
}
/**
* 更新数组元素
* @para