2010-11-24 254 views
-1

嗨 我有一个问题,在波纹管代码中我们是否需要编写n--;减小数组列表的大小

 int n = pointList.size(); 
    for(int i=pointList.size()-1;i>=0;i--){ 
     for(int j=0;j<list.size();j++){ 
      if(pointList.get(i).equals(list.get(j))){ 
       pointList.remove(i); 
       n--; 
      } 
     } 
    } 

另外列表是一个arrayList。 谢谢。

+4

老兄,你需要写更多关于你想要的信息。 – Seva 2010-11-24 16:31:11

+0

因为您将在内部(`j`)循环的下一次迭代中访问`pointList`的`ith`元素,所以您应该在移除`ith`元素之后停止'j`循环... – 2010-11-24 16:33:44

回答

6

ArrayList由一个数组支持,该数组以固定大小开始,只有在需要更大的大小时才调整大小。据我所知,你只能缩小ArrayList的支持商店的尺寸,使用trimToSize()

如果商店的尺寸很重要,可以考虑用LinkedList代替。

注:

如果我正确地读你的代码,你可以代替你张贴着眼前这个不是代码:

pointList.removeAll(list); 
0

不,你不这样做,因为n永远不会被读取到任何地方。

我相信,这是早期的遗留问题,开发人员在debug.print语句或断言中添加了这个参数。

+1

我认为有进一步的暗示使用n。但是由于pointlist.size会返回调整的大小(除非奇怪的实现,“remove”将调整大小),所以不需要通过使用n来跟踪它。 – 2010-11-24 16:29:54

+0

-1从哪里来?为什么? – Daniel 2010-11-24 16:35:21

0

既然这里没有真正的问题,我会猜测。我的猜测是int n = pointList.size();的声明是多余的。既然你将永远有pointList它会知道它的大小。另外我敢打赌,这将抛出一个并发修改异常。

0

因为你删除的ArrayList每次都会减少它的大小一件你根本不用的东西。

,如果你在每次迭代后执行以下操作,它会达到同样的效果:

pointList.remove(pointList.size() - 1);

-1是存在的,因为很明显阵列,0

0

好的开始,我猜你想保留存储在n个最新的pointList的大小。在这种情况下,你必须减少n。但是你可以简单地在double for循环之后赋值n。