package com.pkushutong.Collection;
/**
* 测试底层方法的实现,参照这JDK源码
* @author dell
*
*/
public class Test02{
private Object[] elementData;
private int size;
private int size(){
return size;
}
private boolean isEmpty(){
return size == 0;
}
public Object get(int index){
rangeCheck(index);
return elementData[index];
}
public Test02(){
this(10);
}
public Test02(int initialCapacity){
if(initialCapacity < 0 ){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
elementData = new Object[initialCapacity];
}
public void add(Object obj){
//数组扩容
if(size == elementData.length){
Object[] NewObject = new Object[size * 2 + 1];
//旧数组数据拷贝到新数组里
System.arraycopy(elementData, 0, NewObject, 0, elementData.length);
elementData = NewObject;
}
elementData[size++] = obj;
}
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; // clear to let GC do its work
}
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) {
e.printStackTrace();
}
}
}
public void add(int index, Object obj){
rangeCheck(index);
ensureCapacityInternal();
System.arraycopy(elementData, index, elementData, index + 1,size - index);
elementData[index] = obj;
size++;
}
private void ensureCapacityInternal() {
//数组扩容
if(size == elementData.length){
Object[] NewObject = new Object[size * 2 + 1];
//旧数组数据拷贝到新数组里
System.arraycopy(elementData, 0, NewObject, 0, elementData.length);
elementData = NewObject;
}
}
public static void main(String[] args) {
Test02 t = new Test02(3);
t.add("123");
t.add("234");
t.add("345");
t.add("456");
t.add("567");
System.out.println(t.size());
System.out.println(t.get(5));
}
}
容器第三课,JDK源码分析,自己实现ArrayList数组扩容
最新推荐文章于 2023-03-09 22:38:21 发布