简单工具类ArrayBox---模仿数组
Posted meng--yu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单工具类ArrayBox---模仿数组相关的知识,希望对你有一定的参考价值。
public class ArrayBox {
//设计一个属性,存放真实的数据
private int[]elementDate;
private final int DEFAULT_CAPACITY=10;
//构造方法地重载
public ArrayBox(){
elementDate=new int[DEFAULT_CAPACITY];
}
public ArrayBox(int capacity){
elementDate=new int[capacity];
}
//有效元素个数
private int size;
private void ensureCapacityInternal(int minCapacity){
//判断,最小容量比原数组长度大,就扩容
if (minCapacity-elementDate.length>0){
//计算扩容大小
this.grow(minCapacity);
}
}
private void grow(int minCapacity){
//获取原数组长度
int oldCapacity=elementDate.length;
//在原属组织上扩容1.5倍
int newCapacity=oldCapacity+(oldCapacity>>1);
//比较计算后的长度与所需的长度
if (newCapacity-minCapacity<0){
newCapacity=minCapacity;
}
//把就数组中的元素复制到新数组中
elementDate= this.copyOf(elementDate,newCapacity);
}
private int[]copyOf(int[] oldArray,int newCapacity){//newCapacity新数组的长度
//按提供的长度创建一个新数组
int []newArray=new int[newCapacity];
for (int i=0;i<oldArray.length;i++){
newArray[i]= oldArray[i];
}
return newArray;
}
public boolean add(int element){
//1.确保数组容量够用
this.ensureCapacityInternal(size+1);
//上面代码执行完 证明elementDate地数组肯定够用
//直接将新来的element元素存入数组中 ,让size多记录一个
elementDate[size++]=element;
return true;
}
private void rangeCheck(int index){
if (index<0||index>=size){
//自定义异常
throw new BoxIndexOutOfBoundsException("index:"+index+" size:"+size)
}
}
//获取指定位置的元素
public int get(int index){
//检测给定的index是否合法
this.rangeCheck(index);
//返回
return elementDate[index];
}
//删除指定位置的元素 参数是索引位置
public int del(int index){
this.rangeCheck(index);
//找到index位置地元素保存起来
int oldValue=elementDate[index];
for (int i=index;i<size-1;i++){
elementDate[i]=elementDate[i+1];
}
//将最后一个元素删除 让size少记录一个
elementDate[--size]=0;
//返回数组
return oldValue;
}
public int getSize() {
return size;
}
}
//自定义异常
public class BoxIndexOutOfBoundsException extends RuntimeException {
public BoxIndexOutOfBoundsException(){}
public BoxIndexOutOfBoundsException(String src){
super(src);
}
}
以上是关于简单工具类ArrayBox---模仿数组的主要内容,如果未能解决你的问题,请参考以下文章
多线程控制工具类--倒计时器CountDownLatch的使用(模仿火箭发射)