黑马程序员技术交流社区
标题:
自己实现一个简单的ArrayList的代码
[打印本页]
作者:
My_Android
时间:
2016-5-26 09:23
标题:
自己实现一个简单的ArrayList的代码
/**
* 定义一个类,模拟实现ArrayList 。
* @author hasee
*
*/
public class SxtArrayList {
private Object[] elementData; // 定义一个Object数组来表能接受任何类型的数据
private int size; // 表示容器有个元素
/**
* 默认无参数构造器,默认容器的大小为10
*/
public SxtArrayList(){
this(10);
}
/**
* 有参数构造器
* @param initialCapacity
*/
public SxtArrayList(int initialCapacity){
/**
* 判断 如果initialCapacity < 0 抛出异常
*/
if(initialCapacity < 0){
try {
throw new Exception();
} catch (Exception e) {
e.printStackTrace();
}
}
elementData = new Object[initialCapacity];
}
public int size(){
return size;
}
/**
* 容器是否为空,
* @return
*/
public boolean isEmpty(){
return size == 0;
}
/**
* 往容器添加一个元素 并实现了自动扩展工作,
* @param obj
*/
public void add(Object obj){
ensureCapacity();
elementData[size++] = obj;
}
/**
* 按指定的索引获得元素对象
* @param index
*/
public Object get(int index){
rangeCheck(index);
return elementData[index];
}
/**
* 按照指定的索引删除元素对象
* @param index
*/
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;
}
/**
* 索引检测
* @param obj
*/
private void rangeCheck(Object obj){
for(int i=0;i<size;i++){
if(obj.equals(elementData[i])){
remove(i);
}
}
}
/**
* 按照指定的缩影替换一个元素对象
* @param index
* @param obj
* @return
*/
public Object set(int index,Object obj){
rangeCheck(index);
Object oldValue = elementData[index];
elementData[index] = obj;
return oldValue;
}
/**
* 按照指定的索引插入一个元素对象
* @param index
* @param obj
*/
public void add(int index,Object obj){
rangeCheck(index);
ensureCapacity();
System.arraycopy(elementData, index,elementData, index+1,size-index);
elementData[index] = obj;
}
/**
* 数组的扩容
*/
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;
}
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2