之前我们讲了JAVA语言数组的概念和简单应用,但是我们痛死也发现一个问题,数组的长度一旦确认就不能改,这是硬伤啊!比如说用数组去存放用户的信息,而这个网站中无法确定是有多少个用户,所以这个数据是不断的增加,无法确定的,那怎么让我们的数组在这样的情况下也能用到呢?接下来就向大家介绍下JAVA语言的数组扩容吧。
其实,我们在学习数组的时候,就学到数组和数组之间是可以互相赋值的,那我们利用这个原理就可以来个“狸猫换太子”了。
这里我们弄个小案例来说明吧。案例的要求是:有一个数组中存放了1,2,3,4这4个数据,然后,用户去查询,如果数组中有的就返回该数字在数组中的下标值,如果没有的话,就把这个数添加到数组的末尾,但是保证不覆盖原有的数据。
拿到这样的题目,可能有很多人就有点费脑子了,数组的长度不是确定以后就不能再更改了嘛,那怎么能把新的数字添加入这个数组中呢?在课堂上会有同学想到把没有的数字赋值给数组中最后的一个数字,但是题目中提到不能覆盖原有的数字,也就是说数组的容量(数组的长度)是不断的扩张的!那这个怎么办呢?
我们来考虑下这个问题,数组和数组之间是可以互相赋值,那是否可以创建一个比原数组长度大1的一个新数组,然后,把老数组中的数据全部拷贝到新的数组中,然后把新的数组中最后一位放在原数组没有的数字,最后,再把新的数组的地址赋值给原数组,这样在不违背数组概念的情况下给数组扩容了,这里大家是否能明白呢?如果不明白可以在后面留言。
这里同学们都能听懂的情况下,就遇到另一个问题,代码怎么写呢?好,这里我们看下面的代码:
先来看查询数组的数能够查到的情况的代码:
那如果数组中没有那index中的值将是-1,所以24行和25行将不会被运行,而指执行26行之后的代码:
通过不断的把新数组的地址覆盖原数组的地址来达到不断扩容的需求,大家也可以在自己的电脑上执行一下,看看能否执行成功。
当然,这个程序我是写成死循环,系统会让你不停地输入查询的数字,同学们可以在程序中加入一个跳出循环的条件,让这个程序更健全。
希望这篇文章可以帮助到你