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
当我清除我曾经插入的临时列表时,为什么其他列表中的地球列表是空的?
答案 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());