我知道这是一个基本问题,但是我已经苦苦挣扎了很多天,无法找到解决方案。请提供任何建议,我们将不胜感激。
我只是想将现有ArrayList中包含的元素(节点对象)添加到新的空ArrayList中。这个想法是,如果我可以一次添加一个元素,则可以对1个元素的列表,然后对2个列表,然后对3个列表等等运行堆排序方法。
但是,当使用for循环,while循环甚至增强的for循环时,我无法成功添加元素并输出其结果值或顺序。当我按如下所示手动添加它们时,它似乎可以工作:
ArrayList<Integer> test_list = new ArrayList<Integer>();
test_list.add(0, 5);
test_list.add(1,10);
test_list.add(2, 15);
test_list.add(3, 20);
test_list.add(4, 25);
for (Integer num : test_list){
System.out.println("output testing output testing" + num);
}
但是,当我尝试使用循环添加此类内容时:
for (int i = 0; i<test_list.size()-1; i++)
{
test_list.add(i, i*5);
System.out.println(test_list.get(i));
}
它将不起作用!我看过ArrayList的API,看过stackoverflow问题,从我收集到的信息来看,'.set(index,element)'方法不适用于空列表,但是'.add(index ,element)'应该可以正常工作,但我不知道为什么不可以。
答案 0 :(得分:2)
问题是您开始添加数组列表之前,它的列表为空(大小= 0);因此,您的循环正在空运行。
增强的for循环也将不起作用,因为列表首先没有项目。
当您手动添加它们时,由于您并不依赖于列表的大小,因此可以成功将它们添加到列表中。
在Mert Ozdal's answer
中使用替代实现
答案 1 :(得分:1)
test_list.size()在您的循环中为零。您需要指定for循环的步骤数
答案 2 :(得分:0)
如果使用空列表运行此代码,则for循环根本不会运行。如果在循环外添加两个以上的项目,则for循环将起作用,并且代码将导致无限循环,因为您的上限是test_list ArrayList的大小,并且您正在将项目添加到for循环内的该对象。确定一个静态上限,并多次填充ArrayList以避免无限循环。
for (int i = 0; i<5; i++)
{
test_list.add(i, i*5);
System.out.println(test_list.get(i));
}
答案 3 :(得分:0)
ArrayList.set(index, data)
这用于将项目设置为指定的索引。但是,如果列表大小小于您尝试访问的索引,它将抛出异常,这也很有意义。设置方法只能用于替换项目,不能添加项目
ArrayList.add(index, data)
此方法用于在列表中插入一些数据。如果您尝试在列表的中间插入内容,则将调整数据以为新索引腾出空间。如果您要在列表末尾添加一些内容,那也可以正常工作。但是,如果您要添加项目的索引大于arrayList的大小,则此方法也会出现IOB异常。