自己实现arraylist的底层代码:
arrylist有序可重复。
package cn.liu.three;
/**
* 构建一个自己的ArrayList
* @author dell
*
*/
public 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();
}
}
this.elementData=new Object[initialcapacity];
}
private void ensurecapacity(){
//数组的扩容和数据的拷贝
if(size==elementData.length) {
Object[] newArraylist=new Object[size*2+1];
System.arraycopy(elementData, 0, newArraylist, 0, elementData.length);
for(int i=0;i<elementData.length;i++) {
newArraylist[i]=elementData[i];
}
elementData=newArraylist;
}
}
private void rangecheck(int index) {
if(index<0||index>=size) {
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
}
//构建Arraylist方法
public int size() {
return size;
}
public boolean isEmpty() {
return size==0;
}
public void add(Object obj) {
if(size==elementData.length) {
Object[] newArraylist=new Object[size*2+1];
System.arraycopy(elementData, 0, newArraylist, 0, elementData.length);
for(int i=0;i<elementData.length;i++) {
newArraylist[i]=elementData[i];
}
elementData=newArraylist;
}
elementData[size++]=obj;
}
public Object get(int index) {
rangecheck(index);
return elementData[index];
}
public Object set(int index, Object obj ) {
rangecheck(index);
Object OldValue=elementData[index];
elementData[index]=obj;
return OldValue;
}
public void remove(int index) {
rangecheck(index);
int numMoved = size - index - 1;
if (numMoved > 0){
System.arraycopy(elementData, index+1, elementData, index,numMoved);
}
elementData[--size] = null;
}
public void remove(Object obj){
for(int i=0;i<size;i++){
if(get(i).equals(obj)){ //注意:底层调用的equals方法而不是==.
remove(i);
}
}
}
public void add(int index, Object obj) {
rangecheck(index);
ensurecapacity(); //数组扩容
System.arraycopy(elementData, index, elementData, index + 1,size - index);
elementData[index] = obj;
size++;
}
public static void main(String[] args) {
MyArrayList list=new MyArrayList(3);
list.add("qwer");
list.add("123");
list.add("12345");
list.add("33333");
list.get(3);
list.add(4,"ertyu");
System.out.println(list.set(2,"777"));
System.out.println(list.get(4));
}
}