int size = list.size();
Integer existIndex = -1;
for (int index = 0; index < size; index++) {
Photo photo = list.get(index);
// 确保不会出现多个主图:如果已经找到了主图,把后面的都设置为“非主图”,防止前端验证失败,出现多个主图的情况
if (existIndex != -1) {
photo.setCover(0);
// list.set(index,photo);
}
Integer c = photo.getCover();
// 找到了主图
if (c != null && c.equals(1)) {
existIndex = index;
}
}

上周五的时候,修改集合中的1个元素,获得第N对象,修改对象的属性,这个时候list中的对象属性就更改了,但是,在循环结束之后,发现list中的元素没有修改,又恢复原状了。必须通过list.set(index,photo); 才保证符合预期。

很奇怪,难道list.get,再修改不可行?

周末写了几个集合list的例子,发现都可以正常修改。

import java.util.ArrayList;
import java.util.List; //测试,修改Java集合中的元素的属性
public class ListTest { public static void main(String[] args) {
List<User> list1 = buildList();
list1.get(0).setName("name1");
list1.get(0).setAge(1);
System.out.println(list1.get(0)); List<User> list2 = buildList();
User user2 = list2.get(0);
user2.setName("name2");
user2.setAge(2);
System.out.println(list2.get(0)); for (User user : list2) {
user.setName("name3");
user.setAge(3);
}
System.out.println(list2.get(0)); updateList(list2);
System.out.println(list2.get(0));
} private static void updateList(List<User> list2) {
System.out.println(list2.get(0));
if (true) {
for (User user : list2) {
user.setName("name4");
user.setAge(4);
}
System.out.println(list2.get(0));
}
System.out.println(list2.get(0));
} public static List<User> buildList() {
List<User> list = new ArrayList<User>();
User user = new User();
user.setName("name");
list.add(user);
return list;
} } class User {
private String name;
private Integer age; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public Integer getAge() {
return age;
} public void setAge(Integer age) {
this.age = age;
} @Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
} }

通过例子可以看出,list修改方式没有问题。但是,为什么项目中的代码有问题呢?

今天是周一,再次debug,发现去掉list.set(index,photo); 结果是正确的。

这样我就搞不明白,上周五的代码问题呢。

无法复现问题,就只能“到此为止”了~

一个奇怪的Java集合问题的更多相关文章

  1. 一个简单的Java集合范围过滤的多个方式对比

    在一个项目里面有这么一个技术需求: 1.集合中元素个数,10M 2.根据上限和下限从一个Set中过滤出满足要求的元素集合. 实际这个是个很典型的技术要求, 之前的项目也遇见过,但是因为当时的类库不多, ...

  2. 另外几种Java集合框架具体解释续

    另外几种Java集合框架具体解释续 作者:chszs,未经博主同意不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs fastutil库优于Trove库的 ...

  3. 【新手向】如何学习Java集合

    前言 只有光头才能变强. 文本已收录至我的GitHub精选文章,欢迎Star:https://github.com/ZhongFuCheng3y/3y 如果认识我的同学可能就知道,我已经写过很多系列级 ...

  4. 从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射

    从上面的集合框架图可以看到,Java 集合框架主要包括两种类型的容器,一种是集合(Collection),存储一个元素集合,另一种是图(Map),存储键/值对映射.Collection 接口又有 3 ...

  5. 黑马基础阶段测试题:创建一个存储字符串的集合list,向list中添加以下字符串:”C++”、”Java”、” Python”、”大数据与云计算”。遍历集合,将长度小于5的字符串从集合中删除,删除成功后,打印集合中的所有元素

    package com.swift; import java.util.ArrayList; import java.util.List; import java.util.ListIterator; ...

  6. 一个java集合使用bug

    在使用java集合的时候有的时候集合是来自于一些第三方工具提供的从字符串或json 转出集合的对象有时是抽象类,这时的对象部分功能是未实现的,在使用相应操作的时侯 会引发bug. Exception  ...

  7. Java集合容器简介

    Java集合容器主要有以下几类: 1,内置容器:数组 2,list容器:Vetor,Stack,ArrayList,LinkedList, CopyOnWriteArrayList(1.5),Attr ...

  8. java集合框架之java HashMap代码解析

     java集合框架之java HashMap代码解析 文章Java集合框架综述后,具体集合类的代码,首先以既熟悉又陌生的HashMap开始. 源自http://www.codeceo.com/arti ...

  9. Java 集合深入理解(12):古老的 Vector

    点击查看 Java 集合框架深入理解 系列, - ( ゜- ゜)つロ 乾杯~ 今天刮台风,躲屋里看看 Vector ! 都说 Vector 是线程安全的 ArrayList,今天来根据源码看看是不是这 ...

随机推荐

  1. vSphere5安装配置视频教程

    vSphere5安装配置视频教程 本文出自 "李晨光原创技术博客" 博客,请务必保留此出处http://chenguang.blog.51cto.com/350944/819550

  2. OpenCV FileStorage类读写XML/YML文件

    本文转自:http://www.cnblogs.com/summerRQ/articles/2524560.html 在OpenCV程序中,需要保存中间结果的时候常常会使用.xml / .yml文件, ...

  3. linux 10201 ocfs RAC 安装+升级到10205

    准备环境的时 ,要4个对外IP,2个对内IP 不超过2T,,一般都用OCFS 高端存储适合用ASM linux10G安装的时候,安装的机器时间要小于等于(如果是等于要严格等于)第二个机器的时间(只有l ...

  4. JS 引擎基础之 Shapes and Inline Caches

    阅读下面这篇文章,需要20分钟: 一起了解下 JS 引擎是如何运作的吧! JS 的运作机制可以分为 AST 分析.引擎执行两个步骤: JS 源码通过 parser(分析器)转化为 AST(抽象语法树) ...

  5. Yeslab华为安全HCIE七门之--防火墙高级技术(17篇)

    Yeslab 全套华为安全HCIE七门之第三门 防火墙高级技术     课程目录: 华为安全HCIE-第三门-防火墙高级技术(17篇)\1_用户认证_用户_认证域_认证策略.avi 华为安全HCIE- ...

  6. 洛谷 P2309 loidc,卖卖萌

    P2309 loidc,卖卖萌 题目背景 Loidc萌萌哒. 他最近一直在靠卖萌追求他的真爱——vivym,经过几轮攻势后vivym酱眼看就要被他所攻略.擅长数据结构的vivym决定利用强大的数据结构 ...

  7. SFINAE 模板替换失败而非报错的应用

    体会这一个例子,检查是否是一个类:P187

  8. POJ 1466 Girls and Boys (匈牙利算法 最大独立集)

    Girls and Boys Time Limit: 5000MS   Memory Limit: 10000K Total Submissions: 10912   Accepted: 4887 D ...

  9. Android 经常使用的adb命令

    1.安装APK(假设加 -r 參数,保留已设定数据.又一次安装filename.apk) adb install xxx.apk adb install -r xxx.apk 2.卸载APK(假设加 ...

  10. 用NPOI、C#操作Excel表格生成班级成绩单

    在C#中利用NPOI操作Excel表格非常方便,几乎上支持所有的Excel表格本身所有的功能,如字体设置.颜色设置.单元格合并.数值计算.页眉页脚等等. 这里准备使用NPOI生成一个班级成绩单Exce ...