java动态数组怎么定义,java动态数组初始化,java实现动态数组

java动态数组怎么定义,java动态数组初始化,java实现动态数组

本文主要详细介绍动态数组的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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: