zoukankan      html  css  js  c++  java
  • 一个奇怪的Java集合问题

    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); 结果是正确的。


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

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

  • 相关阅读:
    http协议介绍
    使用Bind提供域名解析服务
    .bash_profile和.bashrc的区别
    SNAT和DNAT
    9.Iptables与Firewalld防火墙
    ubuntu18.04.3新装系统安装QT5.14.1和环境配置
    【Navicat】如何激活成永久版本
    windows 安装配置mysql 8,以及远程连接访问
    fork子进程父进程死掉之后,getppid()不为1的解决办法
    ubuntu64运行32位程序安装过程
  • 原文地址:https://www.cnblogs.com/qitian1/p/6462659.html
Copyright © 2011-2022 走看看