scala.collection.mutable.LinkedList
可变集合的 append
方法有个细节需要注意:
// 当list为空时
scala> val list = LinkedList[String]()
scala> val list2 = LinkedList[String]("ele")
scala> list.append(list2)
res6: scala.collection.mutable.LinkedList[String] = LinkedList(ele)
scala> list
res7: scala.collection.mutable.LinkedList[String] = LinkedList()
scala> list.size
res8: Int = 0
看到 list 本身并没有改变,仍为空,它的实现是判断自身为空时append方法直接返回要附加的对象,所以得这样用。
scala> val r = list.append(list2)
r: scala.collection.mutable.LinkedList[String] = LinkedList(ele)
scala> r(0)
res9: String = ele
当它不为空时,才会改变自身:
scala> val list = LinkedList[String]("1")
scala> list.append(list2)
scala> list.size
res11: Int = 2
它的文档里有讲到这点,但仍觉得很不合理,一是不符合大众的直觉,二是也并非所有的可变集合在为空时 append 操作也这样,比如ListBuffer
里的append
方法,在自身为空时仍会改变自身:
scala> val buf = ListBuffer[String]()
buf: scala.collection.mutable.ListBuffer[String] = ListBuffer()
scala> buf.append("A")
scala> buf
res4: scala.collection.mutable.ListBuffer[String] = ListBuffer(A)
scala> buf(0)
res5: String = A