黑马程序员技术交流社区

标题: 集合里ArrayList元素排放问题. [打印本页]

作者: 丁永志    时间: 2013-8-7 21:28
标题: 集合里ArrayList元素排放问题.

  1. import java.util.*;


  2. public class ListDemo2 {

  3.        
  4.         public static void main(String[] args) {
  5.                 Test2();
  6.         }

  7.         public static void Test2() {
  8.                 List<Integer> data = new ArrayList<Integer>();
  9.                 data.add(0);
  10.                 data.add(1);
  11.                 data.add(2);
  12.                 data.add(3);
  13.                 data.add(4);
  14.                 data.add(5);
  15.                 data.add(6);

  16.                 System.out.println(data.toString());
  17.                
  18.                 for (int i = 0; i < data.size(); i++) {
  19.                        
  20.                         data.add(data.get(i));
  21.                         data.remove(data.get(i));
  22.                 }
  23.                 System.out.println(data.toString());


  24.                 for (int i = 0; i < data.size(); i++) {
  25.                        
  26.                         data.add(data.get(i));
  27.                         data.remove(data.get(i));
  28.                 }
  29.                 System.out.println(data.toString());
  30.         }

  31. }
复制代码
输出结果

[0, 1, 2, 3, 4, 5, 6]
[1, 3, 5, 0, 4, 2, 6]
[3, 0, 2, 1, 4, 5, 6]


首位的0并没有放在最后 这是为什么。
该如何解决 求大神。
作者: 李政    时间: 2013-8-7 21:48
为什么0能放在最后呢 这个程序打印的规律造成的0不会放在最后  

arraylist是按数组存放的  怎么存进去的 就怎么打印

当移除一个元素之后,那么所有元素的角标就会改变

这个打印结果是有规律可循的
作者: 肥猫    时间: 2013-8-7 22:04
本帖最后由 肥猫 于 2013-8-7 22:07 编辑

我看不懂你想问什么?其实你要是对结果有疑问直接把输出语句上移到循环里看就知道结果了,
作者: jrry    时间: 2013-8-7 22:06
对集合中的数据的删除会造成集合的角标改变,

按照楼主上面的操作,集合的每一次增加与删除同一个数据使得角标改变,而每一次操作的集合是上一个集合操作后角标改变的新集合

所以这种操作了集合长度次数后,造成原集合的索引0位置的数不可能在最后一位

如果楼主用开发工具的话,debug一下会看的比较明白。如果没用,那么手动写一些也会比较清楚,反正次数不多。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2