gpt4 book ai didi

java - ArrayList和Array递归的区别

转载 作者:行者123 更新时间:2023-12-01 18:34:33 24 4
gpt4 key购买 nike

递归填充简单数组,然后打印所有内容:

void printArray(int[] a,int i)
{
if(i > 5)
return;

a[++i] = i;
printArray(a,i);

System.out.println("array size is "+a.length);
for(int k=0;k<i;k++)
System.out.print(a[k]+" ");
System.out.println();
}

输出:(数组大小在main中定义)

array size is 6
0 1 2 3 4
array size is 6
0 1 2 3
array size is 6
0 1 2
array size is 6
0 1
array size is 6
0

现在,采用这个简单的 ArrayList 片段:

void printArray(ArrayList a, int n)
{
if(++n > 5)
return;

a.add(n);
printArray(a,n);

System.out.println("Size of array list is "+a.size());
System.out.println("Content of Array list are "+a+"\n\n");
}

输出:

Size of array list is 6
Content of Array list are [0, 1, 2, 3, 4, 5] /*this is fine */


Size of array list is 6
Content of Array list are [0, 1, 2, 3, 4, 5] /*should have been [0, 1, 2, 3, 4]*/


Size of array list is 6
Content of Array list are [0, 1, 2, 3, 4, 5]/*should have been [0, 1, 2, 3]*/


Size of array list is 6
Content of Array list are [0, 1, 2, 3, 4, 5]/*should have been [0, 1, 2]*/


Size of array list is 6
Content of Array list are [0, 1, 2, 3, 4, 5]/*should have been [0, 1]*/


Size of array list is 6
Content of Array list are [0, 1, 2, 3, 4, 5]/*should have been [0]*/

问题:递归堆栈的内存实现中,数组输出是我正确理解的,先前或随着 i 的增加,下面堆栈保存的值比上面的堆栈小一,但是使用相同的实现,为什么 ArrayList 的所有堆栈都包含应该包含的值仅位于递归堆栈的顶部???

ArrayList的递归是如何实现的???

最佳答案

您的代码首先用值分别填充数组和ArrayList,然后打印内容。

唯一的区别是,在 ArrayList 的情况下,您打印整个列表,而在 Array 的情况下,您仅打印元素 0i

由于 i 是一个原始值,每次调用 printArray() 都有其自己的版本

但是对象(例如ArrayList的实例)是作为引用传递的。因此,每次调用 printArray() 都在同一个 ArrayList 上工作,而不是在原始实例的副本上工作。这就是为什么在使用 ArrayList 时所有 printArray() 调用都会打印相同结果的原因。

这里有一个教程,描述了基本类型和对象之间的区别:http://www.javawithus.com/tutorial/call-by-value-and-call-by-reference

关于java - ArrayList和Array递归的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639421/

24 4 0