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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

lass Data {
        int        val;

        int        getVal() {
                return val;
        }

        void        setVal(int val) {
                this.val = val;
        }
}

public class ListTest {

  public static void main(String argv[]) {
          Data data = new Data();

          ArrayList list = new ArrayList();

          for (int i=100; i<103; i++) {
            data.setVal(i);
            list.add(data);
     }

        int j = 0;
        while (j < list.size()) {
                  Data tmp = (Data )list.get(j);
                  System.out.println("list(" + j + ") = " + tmp.getVal());
                 j++;
        }
  }
}

4 个回复

倒序浏览
这里list集合里面装入的都是同一个对象!每次循环都回重新设置 i 的值,于是data中 i 的值在变。由于list集合是有序的,因此允许加入多次同一个对象。

评分

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

查看全部评分

回复 使用道具 举报
改用hashset存储的话效果就很明显了  只能打印出一个值。
回复 使用道具 举报
冯敏 黑马帝 2011-11-22 16:17:59
板凳
输出结果为:
list(0) = 102
list(1) = 102
list(2) = 102
我想这不是你想要的结果吧,先分析一下再说,
首先实例化一个Data和list的对象,然后执行for循环,
i=100时,把Data中的vail属性值赋为100,把Data类对象放入list,
i=101时,把Data中的vail属性值赋为101,把Data类对象放入list,
i=102时,把Data中的vail属性值赋为102,把Data类对象放入list,
那么循环三次都是把同一对象放入了ArrayList里面,所以会出现上面的结果,如果想要存放100、101、103在for循环内实例化Data对象就好啦,代码如下:
Data data = null;
      ArrayList list = new ArrayList();
      for (int i=100; i<103; i++) {
              data = new Data();
        data.setVal(i);
        list.add(data);
}






评分

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

查看全部评分

回复 使用道具 举报
输出结果:
list(0) = 102
list(1) = 102
list(2) = 102
你在这行代码前面加个断点 Data tmp = (Data )list.get(j);
debug后,你会发现,temp的值一直没变。

评分

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

查看全部评分

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