动态扩展数组的长度

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了动态扩展数组的长度相关的知识,希望对你有一定的参考价值。

动态扩展数组长度(自定义)

在Java中,创建的数组都是定长的,也就是数组一旦创建,长度就已经确定了,但是我们往往遇到要添加的元素个数,超出了数组的长度,这种情况如何处理了?接下来就介绍一种简单的思路去扩展数组的长度。

动态扩展数组的思路

1)定义一个数组。
2)向数组中添加元素。
3)当元素的个数超出了数组的长度的时候,则需要对数组进行动态的扩容
4)再次新建一个数组,该数组的长度为第一步创建的数组长度基础上再增加50%(初始化数组长度为10,每次增加5)。
5)在创建完新的数组之后,一定要记得将原有数组中的所有元素,复制到新的数组中。

代码设计(以String数组为例)

代码示例1:定义一个方法,用于向数组中添加元素,元素和数组作为参数传递。

public String[] addElement(String[] str,String element){
//找出还未存放元素的位置下标,以值为null则认定为可以添加元素
//定义一个变量,用于记录下标值,默认值为-1
int index = -1;
//使用循环,找出第一个为null值得下标
for(int i = 0;i < str.length;i++){
//判断第一个为null得值,则结束循环
if(str[i] == null){
index = i;
break;
}
}
//根据index得值,判断是否有能够存放元素,
if(index != -1){
str[index] = element;
}else{
//如果index等于-1,则说明上面循环中没有找到null得下标位置,说明已经存放不下,则需要动态扩展
//直接调用动态扩展数组得方法,并赋值给str数组
str = arrayLengthen(str);
//使用递归,再次调用添加元素的方法,现在使用的数组,是已经扩容之后的数组
str = addElement(str,element);
}
return str;
}

代码示例2:定义一个函数,用于动态扩展数组得长度,每次给数组增加长度为5,数组作为参数传递

public String[] arrayLengthen(String[] str){
//获取数组得长度:
int len = str.length;
//新建一个数组,长度为原有数组长度上面再增加5个
String[] tempArray = new String[len + 5];
//将原来数组中的所有元素,复制到新建的数组中,使用循环完成。(很重要)
for(int i = 0;i < str.length;i++){
tempArray[i] = str[i];
}
//将数组返回
return tempArray;
}

代码示例3:测试代码

public static void main(String[] args){
//新建一个数组,长度为10
String[] str = new String[10];
Scanner scanner = new Scanner(System.in);
//使用死循环输入
while(true){
System.out.print("请输入字符串:");
String element = scanner.next();
//调用添加数组的方法:
//静态中调用非静态方法,需要创建对象,这里根据自己的类,自己创建对象即可,略
str = addElement(str,element);
}
}

代码中没有遍历输出数组中的元素进行校验,这个步骤自行完成

以上是关于动态扩展数组的长度的主要内容,如果未能解决你的问题,请参考以下文章

动态 Rstudio 代码片段

Java中的可变长度(动态)数组

带有 SWIG 未知长度数组的 NumPy C 扩展

片段中的按钮自定义视图

获取php数组的最后5个元素

Go切片实现