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

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

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

一、动态扩展数组的思路

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

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

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

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

2)代码示例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)代码示例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();
        //调用添加数组的方法:
        //静态中调用非静态方法,需要创建对象,这里根据自己的类,自己创建对象即可,略
        addElement(str,element);
    }
}

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

原文地址:https://www.cnblogs.com/private-lxl/p/11187966.html

时间: 2024-08-06 09:44:18

动态扩展数组长度(自定义)的相关文章

获取动态数组指针 所指向数组长度的一种方法

经常在程序中会动态创建一个数组.将用一个指针来指向这个数组. 刚学C++,在动手想写东西时,考虑到想要取得这个动态数组的长度.网上找了点资料.基本想没得到好的答案,但看到了有人提到用 _msize取内存计算的方法.我自己测试了一下,貌似可以. 亲测代码如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 struct DATA {     int price;     char name[100]; }; void fn(D

c语言实现动态指针数组Dynamic arrays

c语言实现动态数组. 基本原理:事先准备好一个固定长度的数组.如果长度不够的时候,realloc一块区域.另外:在数组元素减少的情况下,需要缩减数组长度. 主要接口: cp_bool DyArrayAppend(DyArray* pArr, void* pData)//加数据到数组末尾 cp_bool DyArrayExpand(DyArray* pArr, cp_int32 nNeed)//扩展数组 cp_bool DyArrayDelete(DyArray* pArr, cp_int32 n

如何在c程序中动态使用数组

C语言不允许对数组的大小作动态定义,不能在程序中临时输入数组大小,这就给编程带来一定的困难. 下面通过一个求平均数和标准差的小程序来展示如何在程序中动态定义数组大小: 1 /*如何在c程序中动态使用数组(calloc函数)*/ 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 int main(){ 6 int num; //数据个数 7 double sum,ave,s2; //数据和.平

动态定义数组?.xml

pre{ line-height:1; color:#3c3c3c; background-color:#d2c39b; font-size:16px;}.sysFunc{color:#627cf6;font-style:italic;font-weight:bold;} .selfFuc{color:#800080;} .bool{color:#d2576f;} .condition{color:#000080;font-weight:bold;} .key{color:#000080;} .

动态创建数组

使用运算符new也可以创建数组类型的对象,这时需要给出数组的结构说明.用new运算符动态创建一维数组的语法形式为: new 类型名[数组长度]: 其中数组长度指出了数组元素的个数,它可以是任何能够得到正整数值的表达式. 细节: 用new动态创建一维数组时,在方括号后仍然可以加小括号"()",但小括号内不能带任何参数.是否加"()"的区别在于,不加"()",则对数组每个元素的初始化,与执行"new T"时所进行初始化的方式相同:

js 如何动态添加数组_百度知道

1.数组的创建var arrayObj = new Array(); //创建一个数组var arrayObj = new Array([size]); //创建一个数组并指定长度,注意不是上限,是长度var arrayObj = new Array([element0[, element1[, ...[, elementN]]]]); 创建一个数组并赋值 要说明的是,虽然第二种方法创建数组指定了长度,但实际上所有情况下数组都是变长的,也就是说即使指定了长度为5,仍然可以将元素存储在规定长度以外

C语言---数据结构(内建,数组,自定义)

数组是一组有序数据的集合,每个元素都属于同一个数据类型. 一维数组的定义: 类型符  数组名[常量表达式] 常量表达式中,可以包括常量和符号常量,int a[3+5]是合法的.但是不能包含int a[n],C语言不允许动态数组. 子函数中是可以存在int a[2*n]的,但是不能是static局部变量,因为子函数中的数据在执行时,n已经确认,可以在 栈中分配出int n[2*n]的地址空间. 在定义时,初始化: 1) int a[10] = {0,1,2,...,9};  //使用{}l=括号

Java 反射Array动态创建数组

Java 反射Array动态创建数组 @author ixenos 注:java.lang.reflect.Array 是个反射工具包,全是静态方法,创建数组以多维数组为基准,一维数组只是特殊实现 创建一个具有指定的组件类型和长度的新数组(一维数组) newInstance public static Object newInstance(Class<?> componentType, int length) throws NegativeArraySizeException 创建一个具有指定

C++获取数组长度!

一.静态数组. 比如 int int_ary[5] ,静态数组在编译的时候就知道了数组长度,这对编译器来说挺好实现的. 用得最多的大概就是sizeof了吧: 1 #define countof_macro(x) (sizeof((x)) / sizeof(x)[0]) 对于C++,可以用模板. 如果将数组作为函数形参的话,它会退化成一个指针,但是引用则不会.使用引用带来的另外一个问题就是,声明参数时必须知道数组长度——我要是知道我还费这劲干啥?解决方法就是使用模板,将数组引用的数组大小声明为模板