本文主要详细介绍动态数组的java实现。本文中的示例代码非常详细,具有一定的参考价值。感兴趣的朋友可以参考一下。
本文分享java动态数组的具体代码,供大家参考。具体内容如下。
数组的最大优势:快速查询。分数[2].数组最好用在索引有语义的时候,但是如果索引很长,就不要用数组,比如ID号,太长了。
Java提供的数组是静态数组,一开始大小是固定的,所以我们要创建一个动态数组来满足我们的需求。其实原理挺简单的。第一次创建时,给它一个初始大小,容量不够时,就进行扩展。下面代码的关键是resize方法。
公共类数组{
私有E[]数据;
私有整数大小;
/**
*声明容量大小
*
* @参数容量
*/
公共阵列(整数容量){
java中不能直接创建泛型数组,只能这样转换。
data=(E[])新对象[容量];
大小=0;
}
公共数组(){
这(20);//默认容量是20
}
/**
*获取指定索引的值
*
* @param key
* @返回
* @抛出异常
*/
公共E get(整数键)引发异常{
if(key=data . length | | key 0 | | key=size)
抛出新异常(“索引非法”);
返回数据[键];
}
/**
*向指定的索引添加一个值。如果在索引和索引后面有一个值,这些值将全部向后移动一位。
*
* @param key key不能大于size或小于0。
* @param value要插入的值
*/
公共void插入(整数键,E值)引发异常{
this . resize(true);//在密钥检查之前执行
this.checkKey(key,false);
//后退一位
for(整数I=size-1;i=key我-)
data[I 1]=data[I];
数据[键]=值;
尺寸;
}
/**
*删除指定索引的元素,所有后续元素向前移动一个索引。
*
* @param key
*/
公共void delete(整数键)引发异常{
checkKey(key,true);
for(整数i=key一号尺码;我)
data[I]=data[I 1];
//其实键索引的值是通过覆盖删除的,但是最后需要删除size-1索引的值。
data[size-1]=null;
尺寸-;
this . resize(false);
}
/**
*检查钥匙是否合法。
*
* @param key
* @param equal如果为true,则键不能等于大小,否则可以等于大小。
* @抛出异常
*/
私有void checkKey(整数键,布尔相等)引发异常{
如果(相等){
if(key=data . length | | key 0 | | key=size)
抛出新异常(“索引非法”);
}否则{
if(key=data . length | | key 0 | | key size)
抛出新异常(“索引非法”);
}
}
/**
*重置数组大小
*
* @param isExpand是否展开?
*/
私有void resize(Boolean isExpand) {
if (size==data.length isExpand) {
//如果数组已满,则将其扩展到当前容量的1.5倍。
E[] buffer=(E[])新对象[size(size/2)];
for(整数I=0;I尺寸;我)
缓冲区[i]=数据[I];
数据=缓冲区;
} else if (size data.length/4(!isExpand) data.length/2!=0) {
//如果数组的大小小于容量的四分之一,则容量减半
E[]buffer=(E[])new Object[data . length/2];
for(整数I=0;I尺寸;我)
缓冲区[i]=数据[I];
数据=缓冲区;
}
}
}
这就是本文的全部内容。希望对大家的学习有帮助,支持我们。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。