您的位置:首页 > 其它

根据数组的原理,自己实现一个简易版的ArrayList

2017-11-04 01:43 651 查看

前言

很早之前查看了String、ArrayList的源码,发现其内部的核心就是对数组的操作,于是决定根据其原理,自己来尝试实现一个简易版的的ArrayList。

MyArrayList主要包括增、删、改、查几个功能。

代码如下

/**
* 自己写一个简易版的的ArrayList
*
* @author ALion
* @version 2017/11/3 22:35
*/
public class MyArrayList<E> {

private Object[] elementData;

private int size;

public MyArrayList() {
this(10);
}

public MyArrayList(int initCapacity) {
if (initCapacity < 0) {
throw new IllegalArgumentException("initCapacity不应该 < 0");
}
elementData = new Object[initCapacity];
}

/**
* 获取容器当前拥有的object的数目
*/
public int size() {
return size;
}

/**
* 判断容器内object的数目是否为0
*/
public boolean isEmpty() {
return size == 0;
}

/**
* 在后面添加一个object
*/
public boolean add(E element) {
checkCapacity();

elementData[size++] = element;
return true;
}

/**
* 获取index位置的object
*/
public E get(int index) {
checkIndex(index);

return (E) elementData[index];
}

/**
* 移除index位置的object
*/
public boolean remove(int index) {
checkIndex(index);

int moveNum = size - (index + 1);
if (moveNum > 0) {
System.arraycopy(elementData, index + 1, elementData, index, moveNum);
elementData[--size] = null;
return true;
}
return false;
}

/**
* 移除一个object
*/
public boolean remove(Object obj) {
for (int i = 0; i < elementData.length; i++) {
if (obj.equals(elementData[i])) {
return remove(i);
}
}
return false;
}

/**
* 将index位置的值改为传入的object
*/
public Object set(int index, E element) {
checkIndex(index);

E old = (E) elementData[index];
elementData[index] = element;
return old;
}

/**
* 在index的位置插入一个object
*/
public boolean add(int index, E element) {
checkIndex(index);

checkCapacity();

System.arraycopy(elementData, index, elementData, index + 1, size - index);
elementData[index] = element;
return true;
}

/**
* 检查index范围
*/
private void checkIndex(int index) {
if (index < 0 || index >= size) {
throw new IndexOutOfBoundsException("index不能 < 0 或者 >= size");
}
}

/**
* 检查数组容量
*/
private void checkCapacity() {
if (size >= elementData.length) {
Object[] newData = new Object[size * 2 + 1];
System.arraycopy(elementData, 0, newData, 0, elementData.length);
elementData = newData;
}
}

}


测试一下

/**
* Main
*
* @author ALion
* @version 2017/11/3 23:04
*/
public class Main {

public static void main(String[] args) {
MyArrayList<String> list = new MyArrayList<>();
list.add("zhangsan");
list.add("lisi");
for (int i = 0; i < 10; i++) {
list.add("wangwu" + i);
}
System.out.println(list.size());
System.out.println(list.get(5));
list.set(1, "hello");
list.remove(2);
list.add(3, "hehe");
System.out.println(list.isEmpty());

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐