A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 丁永志 中级黑马   /  2013-8-7 21:28  /  1460 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


  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并没有放在最后 这是为什么。
该如何解决 求大神。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

3 个回复

倒序浏览
为什么0能放在最后呢 这个程序打印的规律造成的0不会放在最后  

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

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

这个打印结果是有规律可循的
回复 使用道具 举报
本帖最后由 肥猫 于 2013-8-7 22:07 编辑

我看不懂你想问什么?其实你要是对结果有疑问直接把输出语句上移到循环里看就知道结果了,
回复 使用道具 举报
对集合中的数据的删除会造成集合的角标改变,

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

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

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

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马