ArrayList继承并实现了List,其源码实现也就是基于对数组的操作
package 学习;
import java.util.ArrayList;
class MyArrayList{
private Object[] elementData;
private int size;
//构造器
public MyArrayList(){
this(10); //默认数组大小
}
public MyArrayList(int initialCapacity){
if (initialCapacity < 0){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
elementData = new Object[initialCapacity];
}
//添加元素
public void add(Object obj){
ensureCapacity();
elementData[size] = obj;
size++;
}
public void add(int index, Object obj){
rangeCheck(index);
ensureCapacity();
System.arraycopy(elementData, index, elementData, index+1, size-index);
size++;
}
public int size(){
return size;
}
//获取指定索引
public Object get(int index){
return elementData[index];
}
public void remove(int index){
rangeCheck(index);
//删除指定位置对象
int num = size-index-1;
if (num > 0){ //如果是最后一个就不用拷贝,把原来iNdex位置覆盖掉在数组最后设null;
System.arraycopy(elementData, index+1, elementData, index, num);
}
elementData[size--] = null;
}
public void remove(Object obj){//移除这个对象
for (int i=0; i<size; i++){
if (get(i).equals(obj)){ //找到相同的对象
remove(i);
}
}
}
//设置指定索引值,返回值是原来的值
public Object set(int index, Object obj){
rangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = obj;//设置新的值
return oldValue;
}
private void rangeCheck(int index){
if (index<0 || index>=size){
try {
throw new Exception();
} catch (Exception e) {
System.out.println("越界");
}
}
}
private void ensureCapacity(){
//数组扩容
if(size == elementData.length){
Object[] newArrayList = new Object[size*2];
System.arraycopy(elementData, 0, newArrayList, 0, newArrayList.length);
elementData = newArrayList;
}
}
}
public class Main{
public static void main(String[] args) {
MyArrayList arr = new MyArrayList();
arr.add(123);
arr.add(222);
arr.add(333);
arr.add(444);
arr.remove(0);
System.out.println(arr.size());
arr.set(2, "替换掉");
for (int i=0; i<arr.size(); i++){
System.out.println(arr.get(i));
}
}
}