ArrayBox
Posted passer-byze
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ArrayBox相关的知识,希望对你有一定的参考价值。
//模拟ArrayList的存入删除
public class ArrayBox<T> {
//使数组的长度不可变
private static final int DEFAULT_CAPACITY = 10;
private Object []elementData;//长度一旦确定不能再次发生改变
//记录数组的有效长度
private int size = 0;
public ArrayBox(){
elementData = new Object[DEFAULT_CAPACITY];
}
public ArrayBox(int capacity){
elementData = new Object[capacity];
}
//查看数组是否能装下新存放的数据,如果不能 就进行扩容
private void ensureCapacityInternal(int minCapacity){
//如果数据长度大于创建的数组的长度,就进行扩容
if(minCapacity>elementData.length){
//扩容方法
this.grow(minCapacity);
}
}
//扩容方法
private void grow(int minCapacity){
int oldArrayLength = elementData.length;
int newArrayLength = oldArrayLength + (oldArrayLength>>1);//扩容1.5倍
if(newArrayLength < minCapacity){
newArrayLength = minCapacity;
}
elementData = this.copyOf(elementData,newArrayLength);
}
//将旧数组的数据传入新数组,由于数组长度不可变,所以需要创建一个新数组
private Object[] copyOf(Object [] oldArray,int newArrayLength){
Object [] newArray = new Object[newArrayLength];
for (int i=0; i<oldArray.length; i++){
newArray[i] = oldArray[i];
}
return newArray;
}
//判断索引是否越界
private void rangeCheck(int index){
if(index<0 || index>=size){ //index有效 <= size - 1
//参考数组的操作 自己定义一个异常(自己创建的类)来说明这个问题
throw new MyException("Index:"+index+",Size:"+size);
}
}
//---------------------------------
//添加元素
public boolean add(int element){
//确保我自己的属性数组的内部容量
this.ensureCapacityInternal(size+1);
//size 是有效元素的个数,所以应该从1开始存储
elementData[size++] = element;
return true;
}
//获取索引位置的元素
public T get(int index){
//检测index范围
this.rangeCheck(index);
return (T)elementData[index];
}
//删除元素,并可以获得删除的元素
public T remove(int index){
//检测index范围
this.rangeCheck(index);
T oldValue = (T)elementData[index];
for(int i=index;i<size-1;i++){
elementData[i] = elementData[i+1];
}
elementData[--size] = null;//末尾元素清空
return oldValue;
}
//获取数组长度
public int size(){
return this.size;
}
}
//自己的异常类
public class MyException extends RuntimeException {
public MyException(){}
public MyException(String msg){
super(msg);
}
}
摘自:[https://www.cnblogs.com/yyanghang/p/11061662.html]
以上是关于ArrayBox的主要内容,如果未能解决你的问题,请参考以下文章