scala java 集成_(Scala四.1) Scala中的集合集成结构和常用方法

import java.awt.Font

import scala.collection.mutable

import scala.collection.mutable.ArrayBuffer

import scala.util.Sorting

//#######################4.1主要的集合特质#####################################

/**

* scala同时支持可变集合和不可变集合

* 1)不可变集合: scala.collection.mutable

* 2)可变集合: scala.collection.immultable

* scala优先采用不可变集合

* 集合主要分为三大类:序列(List),集(Set),映射(Map)

*/

//#######################4.2数组#####################################

/**

* 定长数组Array

*/

val array = new Array[Int](10)

/**

* 变长数组ArrayBuffer (类似java中的ArrayList)

*/

val arrayBuffer = ArrayBuffer[Int](1, 2, 3, 4, 5, 6)

arrayBuffer -= 2 += 3 //去掉第2个元素,在后面加上第3个元素

/**

* Array与ArrayBuffer的互转

*/

val ab = array.toBuffer

val a = arrayBuffer.toArray

/**

* 数组的遍历

*/

for (i

println(i + ":" + a(i))

for (i

println(i + ":" + a(i))

for (elem

println(elem)

}

/**

* 过滤/映射

*/

val arr = Array(2, 13, 5, 17, 11, 12)

arr.filter(_ % 2 == 0) //过滤,模2=0,()中的是匿名函数

arr.map(2 * _) //映射,所有值x2,()中的是匿名函数

arr.filter(_ % 2 == 0).map(_ % 2 == 0)

/**

* 求和

*/

Array(2, 3, 5, 7, 11, 12).sum

/**

* 寻最大值

*/

arr.max

/**

* 排序

*/

arr.sorted

arr

Sorting.quickSort(arr) //快排

arr

/**

* 转String

*/

arr.mkString(" and ")

arr.mkString("")

arr.toString

/**

* 定长数组扩充

* 扩充到20,用-1填充

*/

arr.padTo(20, -1)

(1 to 10)

(1 to 10).padTo(20, -1)

/**

* 数组拷贝

* 定长数组2有多大,就往里面装多大

*/

val arr2 = Array(1, 2, 3)

arr.copyToArray(arr2)

arr2

/**

* 多维数组

* 多维数组的创建和遍历

* 三行四列的矩阵(大数组中3个小数组,每个小数组中4个元素)

*/

val matrix = Array.ofDim[Int](3, 4)

matrix(0)(0) = 0

matrix(0)(1) = 1

matrix(0)(2) = 2

matrix(0)(3) = 3

matrix(1)(0) = 10

matrix(1)(1) = 11

matrix(1)(2) = 12

matrix(1)(3) = 13

matrix(2)(0) = 20

matrix(2)(1) = 21

matrix(2)(2) = 22

matrix(2)(3) = 23

for (bigElem

for (elem

print(elem + " ")

}

println()

}

/**

* 和Java数组的互操作

*/

import scala.collection.JavaConverters._

import scala.collection.mutable._

val command = ArrayBuffer("ls", "-al", "/")

val pb = new ProcessBuilder(command.asJava) //Scala to Java

val cmd: Buffer[String] = pb.command().asScala //Java to Scala  :后是类型

//val cmd = pb.command().asScala //Java to Scala

cmd == command

//###########################4.3 映射#################################

/**

* 不可变构造映射

*/

val scores = scala.collection.immutable.Map("Tom" -> 80, "Bob" -> 90, "Liy" -> 100)

/**

* 可变映射

*/

val scores1 = scala.collection.mutable.Map("Tom" -> 80, "Bob" -> 90, "Liy" -> 100)

//空映射(空集合、空映射需要用new关键字)

val scores2 = new scala.collection.immutable.HashMap[String, Int]

//对偶

val scores3 = "Alice" -> 10

val scores4 = Map(("Alice", 10), ("Bob", 3), ("Cindy", 8))

/**

* 获取值

*/

val bobScore = scores("Bob")

//val bob2Score = scores("Bob2") //报异常java.util.NoSuchElementException: key not found: Bob2

scores.get("Bob2") //None

scores.get("Bob2").getOrElse("nobody")

scores.contains("Bob2")

/**

* 可变映射更新值

*/

//scores("Bob") = 10

//scores1("Bob") = 50

scores1 += ("Bob" -> 10, "Fred" -> 7) //有则更新,没则新增

scores1 -= "Tom"

//不能更新一个不可变映射,但是可以获取一个修改过的新映射

scores + ("Bob" -> 10, "Fred" -> 7)

/**

* 迭代映射

*/

for ((k, v)

for (k

for (v

/**

* 排序

*/

val scores5 = scala.collection.mutable.SortedMap(100 -> "Tom", 90 -> "Bob", 80 -> "Liy")

/**

* 双向链表HashMap

*/

val months = scala.collection.mutable.LinkedHashMap("Tom" -> 100, "Bob" -> 90, "Liy" -> 80)

/**

* 与Java互转

*/

//val command = ArrayBuffer("ls", "-al", "/")

//

//val pb = new ProcessBuilder(command.asJava) //Scala to Java

//val cmd: Buffer[String] = pb.command().asScala //Java to Scala  :后是类型

val cmd = pb.command().asScala //Java to Scala

//cmd == command

val props = System.getProperties.asScala

import java.awt.font.TextAttribute._

val attrs = Map(FAMILY -> "Serif", SIZE -> 12)

val font = new Font(attrs.asJava)

//###########################4.4 元组#################################

/**

* 元组是不同类型的值得聚集

* 元组是从1开始不是0,可以把t._2写成t _2,但补鞥呢写成t_2

* 元组可用于函数需要返回不止一个值的情况,使用元组的原因之一是把多个值绑在一起,以便他们能够被一起处理

*/

val t = (1, 3.14, "Fred")

val second = t._2

val three = t _3

/**

* 拉链操作

* 见异思迁,把2ge集合的元素根据索引位置绑在一块,大小取决于小的那个长度

*/

val symbols = Array("")

val counts = Array(2, 10, 3, 4)

val pairs = symbols.zip(counts)

//###########################4.5 队列#################################

/**

* 队列

* 是一个先进先出的结构

*/

val q1 = new mutable.Queue[Int]()

q1 += 1 //压栈

q1 += 2 //压栈

q1 ++= List(3, 4) //压栈

q1.dequeue() //弹栈

q1.enqueue(5, 6, 7) //压栈

q1

q1.head

q1.tail //除首元素之外的元素

//########################### 4.6 堆栈 #################################

/**

* 堆栈

* Stack是一个先进后出的结构

*/

val s = new mutable.Stack[Int]()

s.push(1)

s.push(2)

s.pushAll(List(3, 4))

s.pop()

s

s.head

s.tail

//########################### 4.7 列表 #################################

/**

* 列表

* 如果List为空,用Nil来表示

*/

val digits = List(4, 2)

9 :: List(4, 2)

1::2::List(4, 2)

1::2::3::4::Nil

//########################### 4.8 集 #################################

/**

* 集 Set

* 不重复元素的集合,不保留顺序,默认哈希排序

* 需要排序的话可以用SortedSet,它的排序时通过红黑树实现的

*/

4.10常用方法

类似文章:https://blog.csdn.net/bitcarmanlee/article/details/72795013

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值