当我清除我在[Java]中添加的临时列表时列表中的列表成为空

时间:2017-11-08 11:13:51

标签: java list arraylist

java.util.List<java.util.List<String>> statuses = new java.util.ArrayList<>();
java.util.List<String> temp = new java.util.ArrayList<>();

System.out.println("yoi :" + temp.size());
statuses.add(temp);
System.out.println("warui :" + statuses.get(0).size());
temp.clear();
System.out.println("kirai :" + statuses.get(0).size());

控制台输出:

yoi :31
warui :31
kirai :0

当我清除我曾经插入的临时列表时,为什么其他列表中的地球列表是空的?

3 个答案:

答案 0 :(得分:5)

您正在向List statuses添加对List的引用,这意味着statuses拥有对{List所引用的temp的引用1}}。

在将temp添加到List之前,您应创建statuses.add(new ArrayList<>(temp)); 的副本:

temp

现在清除statuses不会影响import play.api.libs.json.{Json, OFormat} val a: Map[String, Option[Double]] = Map("a" -> None) case class Person(x: Map[String, Option[Double]]) object Person { implicit val personFormat: OFormat[Person] = Json.format[Person] } Json.toJson(Person(a))

答案 1 :(得分:1)

当您将temp放入statuses时,将是temp的副本,但只会设置参考。

因此,直接使用temp或与statuses.get(0)合作将始终返回相同的实例。每次修改都在同一个对象上。

答案 2 :(得分:-1)

您实际上是在第3张println中显示temp的大小。 试试

System.out.println("kirai :" + statuses.size());