Scala中的List是不可变的递归数据(immutable recursive data),是Scala中的一种基础结构,你应该多用List而不是Array(Array实际上是mutable,不可变(immutable)的Array是IndexedSeq)
Mutable Structures ListBuffer提供一个常数时间的转换到List。一个Scala的Array应该是由Java array生成的。
- ListBuffer
import scala.collection.mutable.ListBuffer
val lst0 = ListBuffer[Int](1, 2, 3)
//动态的增加元素,lst1就会变化, 增加一个一个的元素
val lst1 = new ListBuffer[Int] //空的ListBuffer
lst1 += 4 // lst1 (4)
lst1.append(5) // list1(4,5)
lst0 ++= lst1 // lst0 (1, 2, 3,4,5)
println("lst0=" + lst0)
val lst2 = lst0 ++ lst1 // lst2(1, 2, 3,4,5,4,5)
println("lst0=" + lst0)
println("lst2=" + lst2)
val lst3 = lst0 :+ 5 // lst0 不变 lst3(1, 2, 3,4,5,5)
println("lst3=" + lst3)
- ArrayBuffer
import scala.collection.mutable.ArrayBuffer
val arrayBuffer = ArrayBuffer[Any](2,3,"beijing")
println(arrayBuffer(2))
// 增
arrayBuffer.append(5, 6)
// 删
arrayBuffer.remove(0)
相互转换
- 1 Array和List
使用toList、toArray相互转换:
scala> Array(1,2,3).toList
res14: List[Int] = List(1, 2, 3)
scala> List(1,2,3).toArray
res15: Array[Int] = Array(1, 2, 3)
- 2 定长数组和变长数组的转换
使用toArray、toBuffer相互转换:
val arrayBuffer = ArrayBuffer(1,2,"beijing")
val array = arrayBuffer.toArray
println(array.hashCode(), arrayBuffer.hashCode())
println("遍历不可变数组")
for (item <- array) {
println(item)
}
val mutableArray = array.toBuffer
mutableArray.append(3)
println("遍历mutableArray")
for (item <- mutableArray) {
println(item)
}
println("遍历arrayBuffer")
for (item <- arrayBuffer) {
println(item)
}
-
3 Java数组(List)和Scala数组(ArrayBuffer)的互转
Scala->Java
//创建了ArrayBuffer
val arr = ArrayBuffer("1", "2", "3")
//下面的import 引入了我们需要的隐式函数【这里就是隐式函数的应用】
//implicit def bufferAsJavaList[A](b : scala.collection.mutable.Buffer[A]) : java.util.List[A]
import scala.collection.JavaConversions.bufferAsJavaList
// 触发隐式转换
val javaArr = new ProcessBuilder(arr)
//返回的是 List<String>
val arrList = javaArr.command()
println(arrList) //输出 [1, 2, 3]
Java->Scala
val arrList = new java.util.ArrayList[String]()
import scala.collection.JavaConversions.asScalaBuffer
import scala.collection.mutable
// java.util.List ==> Buffer
val scalaArr: mutable.Buffer[String] = arrList
scalaArr.append("2")
scalaArr.append("3")
scalaArr.append("jack")
scalaArr.append("tom")
println(scalaArr)
scalaArr.remove(0)
println(scalaArr) // (3,jack,tom)
参考:
https://www.jianshu.com/p/bdf90fc486ed
https://blog.youkuaiyun.com/mar_ljh/article/details/81910286