List集合add方法覆盖原来的内容解决办法

现象:
遍历数组的同时在for循环中使用list.add(),但这样会将之前的内容也覆盖掉。本来有3条不同的数据,但这样会得到三条相同的数据。
解决办法:
在循环中将你的对象再new一次

例如:User user = new User();
	 for(int i = 0;i<=list.size();i++){
	    user = new User();  
	 }

原因:

当使用List时,如果T是引用类型,保存的是引用,如果是值类型,保存的是值本身。

1、T是对象是,也就是说如果是引类型时,在循环外边已经new了一个对象,相当于这个对象的地址在内存空间已经开辟出来了,保存到了固定的位置,这时候我们使用add方法时,会增加值的个数,但引用地址不变,所以后面的值会覆盖掉前面的值

2、T是值对象时,这种和上面就不一样了,值对象用来保存一组不会改变的量,当我们需要使用这个对象时,会在系统中开辟另一个空间。因此,值对象使用add方法时不会出现覆盖问题。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: List集合变成以id为对象的Map,可以通过遍历List集合,将每个元素的id作为Map的键,元素本身作为Map的值,最后将所有键值对存入Map中。 具体步骤如下: 1. 创建一个空的Map对象,用于存放结果。 2. 遍历List集合中的每个元素: - 获取当前元素的id。 - 将当前元素作为值,id作为键,存入Map中。 3. 完成遍历后,Map中就包含了按照id为键,元素为值的键值对。 示例代码如下: ``` List<对象类型> list = new ArrayList<>(); // 假设list中已经有了一些对象 Map<id类型, 对象类型> map = new HashMap<>(); for (对象类型 obj : list) { id类型 id = obj.getId(); // 假设对象中有一个叫做getId()的方法,用于获取id map.put(id, obj); } ``` 这样就完成了将List集合转换为以id为对象的Map。使用Map的好处是可以根据id快速找到对应的对象,提高了查找效率。需要注意的是,id在Map中必须是唯一的,否则后面的元素会覆盖前面的元素。 ### 回答2: List集合可以通过将其转换成Map集合来得到以id为Key,对象为Value的映射关系。以下是实现这个转换的步骤: 1. 创建一个空的Map集合,用于存储id和对象的映射关系。 2. 遍历List集合中的每个对象。 3. 对于每个对象,取出它的id属性值。 4. 将id作为Key,对象作为Value,存入Map集合中。 5. 继续遍历下一个对象,直到遍历完整个List集合。 6. 返回最终的Map集合,其中存储了id和对象的映射关系。 通过以上步骤,我们可以将一个List集合转换成以id为Key,对象为Value的Map集合。 需要注意的是,这里假设List集合中的对象都有id属性,并且id属性的值是唯一的。如果存在id重复的情况,后面的对象会覆盖前面的对象,即最终的Map集合中只会保留最后一个对象。 此外,如果需要对Map集合进行进一步操作,比如查找特定id的对象,可以使用Map的get方法,通过id获取对应的对象。 ### 回答3: list集合变 id 对象的map,是指将一个包含对象的list集合转换成一个以对象中的id作为键的map集合。 首先,我们需要定义一个对象类,该类包含一个id属性和其他的属性。然后,我们创建一个list集合,并向其中添加多个对象。 接下来,我们需要创建一个空的map集合,用于存储转换后的结果。然后,我们遍历list集合中的每个对象,将对象的id作为map的键,对象本身作为map的值,然后将其添加到map集合中。 最后,我们可以通过使用id来获取对象,从而实现通过id快速访问和检索对象的目的。 下面是一个例子: ```java public class ExampleObject { private int id; private String name; public ExampleObject(int id, String name) { this.id = id; this.name = name; } // 省略其他属性的getter和setter方法 } public class Main { public static void main(String[] args) { List<ExampleObject> list = new ArrayList<>(); list.add(new ExampleObject(1, "对象1")); list.add(new ExampleObject(2, "对象2")); list.add(new ExampleObject(3, "对象3")); Map<Integer, ExampleObject> map = new HashMap<>(); for (ExampleObject obj : list) { map.put(obj.getId(), obj); } ExampleObject obj = map.get(2); System.out.println(obj.getName()); // 输出:对象2 } } ``` 在上述例子中,我们首先创建了一个包含3个ExampleObject对象的list集合。然后,我们创建一个空的map集合,并将list中的每个对象的id作为键,对象本身作为值,添加到map集合中。最后,我们通过get方法使用id为2的键来获取对象,并输出其name属性。最终输出结果为"对象2"。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值