new java 动态数组_Java动态数组理解

/**

* 顺序表的实现

* @author chengh

* @param

*/

public class ArrayList {

private Object[] data = null; // data: 用来保存此线性表数据的数组

private int capacity; // capacity: 线性表的容量

private int current; // current: 当前数据的下标

/**

* 初始化为声明大小,则设置为10。

*/

ArrayList() {

this(10);

}

/**

* 初始化线性表,声明保存数据的数组大小。

* @param initialSize 顺序表的初始化大小

*/

ArrayList(int initialSize) {

if (initialSize >= 0) {

this.capacity = initialSize;

data = new Object[initialSize];

current = 0;

} else {

throw new RuntimeException("初始化大小不能小于0:" + initialSize);

}

}

/**

* 在线性表的末尾添加元素,添加之前确认线性表是否已满

* @param e 待加入的元素

* @return

*/

public boolean AddElement(E e) {

ensureCapacity();

data[current] = e;

++current;

return true;

}

/**

* 检查存储数据的数组容量,如果数组已经满,则扩充容量;否则不操作。

*/

private void ensureCapacity() {

int index;

if (current == capacity) {

capacity *= 2;

Object[] newData = new Object[capacity];

for(index = 0; index < current; ++index) {

newData[index] = data[index];

}

data = newData;

}

}

/**

* 返回下标为index的元素

* @param index 欲取得元素的下标

* @return

*/

public E get(int index) {

validateIndex(index);

return (E) data[index];

}

/**

*

* @param index 待插入的位置

* @param e 待插入的元素

* @return

*/

public boolean set(int index, E e) {

validateIndex(index);

data[index] = e;

return true;

}

/**

* 验证下标值是否合法,非法时抛出异常

* @param index 待验证的下标值

*/

private void validateIndex(int index) {

if (index < 0 || index > current) {

throw new RuntimeException("无效的下标:" + index);

}

}

/**

* 返回当前顺序表的大小

* @return

*/

public int size() {

return current;

}

/**

* 在指定位置插入指定元素

* @param index 待插入的位置

* @param e 待插入的元素

* @return

*/

public boolean insert(int index, E e) {

validateIndex(index);

ensureCapacity();

for (int temp = current; temp > index; --temp) {

data[temp] = data[temp - 1];

}

data[index] = e;

return true;

}

/**

* 删除下标为index元素

* @param index 待删除元素的下标

* @return

*/

public boolean delete(int index) {

validateIndex(index);

for ( ; index < current - 1; ++index) {

data[index] = data[index + 1];

}

data[current - 1] = null;

--current;

return true;

}

@Override

public String toString() {

String str = "[ ";

for (Object o : data) {

if (o != null) {

str += o + " ";

}

}

str += "]";

return str;

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值