手工实现ArrayList3(增加set,get以及索引越界检查)
public class SxtArrayList04 <E>{
private Object[] elementData;
private int size;
public static final int DEFAULT_CAPACITY=10;
public SxtArrayList04() {
elementData = new Object[DEFAULT_CAPACITY];
}
public SxtArrayList04(int capacity) {
elementData = new Object[capacity];
}
public void add(E element) {
//什么时候扩容
if(size==elementData.length) {
//怎么扩容
Object[] newED = new Object[elementData.length*2];//10*2
System.arraycopy(elementData, 0, newED, 0, elementData.length);
elementData=newED;
}
elementData[size++] = element;
}
public String toString() {
StringBuilder sb= new StringBuilder();
sb.append("[");
for(int i=0;i<size;i++) {
sb.append(elementData[i]+",");
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
public E get(int index) {
Check(index);
return (E)elementData[index];
}
public void set(int index,E element) {
Check(index);
elementData[index]=element;
}
public void Check(int index) {
if(index<0||index>size-1) {
throw new RuntimeException("索引不合法:"+index);
}
}
public static void main(String[] args) {
SxtArrayList04<String> a1=new SxtArrayList04<>();
for(int i=0;i<20;i++) {
a1.add("第"+i);
}
a1.set(5, "阿狸");
System.out.println(a1);
System.out.println(a1.get(2));
}
}
效果
1.异常效果
a1.set(50, "阿狸");
System.out.println(a1.get(200));
2.执行正确效果
public static void main(String[] args) {
SxtArrayList04<String> a1=new SxtArrayList04<>();
for(int i=0;i<20;i++) {
a1.add("第"+i);
}
a1.set(5, "阿狸");
System.out.println(a1);
System.out.println(a1.get(2));
}