一个奇怪的Java集合问题
2015-10-26 11:14
543 查看
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集合问题
- JDK安装与环境变量配置
- java List与json的转换
- LifeRay的portlet开发(使用Netbeans)
- Java Web SSH-Struts 2框架复习
- Java中的Interface
- Jsoup一个简短的引论——采用Java抓取网页数据
- Java关键字的大致含义
- 分布式 ID 生成策略 —— 听云资深 Java 工程师
- Ubuntu12.04配置JDK1.8
- Spring 注解 @Resource和@Autowired
- java容器---Map扩展
- Java中正数与负数操作>>、>>>的区别
- 相对熵(KL距离)的java实现
- eclipse关联源码
- Java 读取属性文件Properties,方式2
- JAVA集合框架概述
- Java从0开始学——字符串
- Java-MySQL中文乱码编码问题总结
- java版记事本程序