在java中,经常使用的基本类型都是非可改变的,包括String这个特殊的对象类型。那么这种非可改变特性会有什么好处类?首先就是线程安全。String可以任意被多个线程共享而不用考虑同步问题。然后就是可以放心的存储一个String,因为它在作为参数传递时也不会被其他方法修改掉,比如toLowerCase()。
非可改变型数据类型的好处就是减少出错的可能性,减少测试代码量,还有在大多数情况下能获得更好的性能。
在scala中,所有的scala原生集合分为两类,分别放在两个不同的包下面,当创建一个集合的时候,如果不引入任何包,那么所得到的集合就是immutable的。要使用mutable的集合,就必须明确的引入scala.collection.mutable包。
简单介绍了immutable集合,那么为什么扯上对象数据库那?
因为DB4O这样的对象数据库要存储非可改变集合是相当让人头疼。
当对象中的immutable集合改变的时候,实际上是创建了新的一个集合,原有的集合被抛弃,在JVM有GC来收集这些垃圾,那么在对象数据库中可没有GC来用(Perst据说有GC,但是不清楚能做到什么程度,理论上很难实现清除),这样数据库就变垃圾场了,目前对象数据库都是针对java专门设计,只对String类型特殊处理。
那么每次修改immutable集合的时候都要手动删除原来的集合对象
好在scala也封装了原有的java集合类,目前我是用java原生集合。
鱼和熊掌不能兼得啊,现在还看不太清对象数据库的前景,不知道将来会不会解决immutable集合类问题。
分享到:
相关推荐
Scala中的集合分为两大类:不可变集合(`immutable`)与可变集合(`mutable`)。不可变集合一旦被初始化后就无法改变其内容或结构,而可变集合则可以在程序运行过程中动态地增加、删除或修改其中的数据。 - **不可...
- 使用Scala的惰性计算和集合优化,可以在不影响代码可读性的情况下提高性能。 通过以上步骤,我们可以高效地利用Scala和MyBatis实现数据库查询。这种结合不仅保持了Scala的优雅和强大,还充分利用了MyBatis的便利...
Scala中集合的使用 大学生 1. List 列表的使用 2. Set 集合的使用 3.Map 映射的使用 4. 元组的使用
15. **Java 集合与 Scala 集合的转换**: - 导入 `scala.jdk.CollectionConverters`,可以使用 `.asJava` 和 `.asScala` 转换。 16. **函数 values**: - 编写一个函数,根据给定区间和函数,生成对应的输入输出...
在学习Scala的过程中,这些习题将覆盖诸如基本语法、类与对象、模式匹配、高阶函数、类型系统、集合框架、并发编程、 Actors模型、Scala与其他Java平台的互操作性等核心主题。通过解决这些习题,学习者可以了解如何...
例如,`val x = 5` 创建了一个不可变变量,而`def add(a: Int, b: Int): Int = a + b` 定义了一个接受两个整数并返回它们之和的函数。 2. **类型系统**:Scala有强大的静态类型系统,类型推断使得编程更为便捷。...
### Scala 集合数据操作详解 #### 一、引言 Scala作为一种融合了面向对象编程和函数式编程特点的编程语言,在数据处理方面展现出了极强的能力。它内置了一系列强大的集合类,使得开发者能够高效地对数据进行操作。...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,被广泛应用于大数据处理领域,特别是与Apache Spark相结合时。本课件是针对Scala学习者精心准备的资源,旨在帮助你深入理解和掌握Scala的...
"快学Scala"系列教程可能涵盖了语言基础、类与对象、高阶函数、模式匹配、类型系统、Actor模型以及 Akka 框架等内容。课后习题是学习过程中巩固知识的重要环节,这里我们将深入探讨这些习题答案集合中的关键知识点。...
但是现在scala的相关学习资料不多,因此,本人总结了几篇写的较好的scala学习资料,包含<ScalaQuery_Commerzbank_2011><twitter-scala><TR611><scala-style-guide>。因此,无论是初学者,还是想要深入研究scala的...
ORM框架可以帮助开发者更方便地将数据库表映射为Scala对象,从而实现对象与数据库之间的自动转换。常用的Scala ORM框架包括Slick和Quill等。 - **Slick**:Slick是一个功能强大的Scala ORM框架,它提供了类型安全的...
- 纯函数:纯函数没有副作用,只依赖于输入参数,不改变外部状态,有助于写出可预测且易于测试的代码。 4. **并发与并行** - Actor模型:Scala的Akka库提供了一种基于Actor的并发模型,Actor是轻量级的线程,通过...
2. 高级特性:可能涉及函数式编程的概念,如高阶函数、惰性求值和不可变性,以及这些特性如何在Scala集合中实现。 3. 类型系统:解释Scala的类型系统如何支持集合操作,如类型推断、泛型和模式匹配。 4. 性能优化:...
Scala是一门现代的多范式编程语言,主要设计目的是为了结合面向对象编程(OO)和函数式编程(FP)的各种特性,同时通过静态类型系统以及与Java平台的互操作性,实现可伸缩的语言设计。Scala基于JVM运行,这意味着它...
3. **集合库优化**:Scala 2.13的集合库进行了重大重构,引入了新的`scala.collection.immutable`和`scala.collection.mutable`包,以提高性能和内存效率。新的集合API提供了更好的并发支持和更多的操作选项。 4. *...
学习Scala语言,不仅仅意味着熟悉新的API,更重要的是一种思维方式的转变。从原有的面向对象编程(OO)到函数式编程(FP)的思想。本书面向实际的使用场景,提供了大量的Scala实例,同时,也给出底层的原理和相关的...
2. **标准库**:Scala的标准库提供了大量的类和模块,包括集合操作、I/O、反射、并发处理等,这些是编写Scala程序的基础。 3. **Scala REPL**:Read-Eval-Print Loop,交互式解释器,允许开发者即时测试代码片段,...
另外,Scala的case类简化了创建不可变对象的过程,并且与模式匹配紧密配合。 异常处理在Scala中通过try-catch-finally语句实现,它允许你优雅地处理程序运行时可能出现的问题。Scala还提供了强大的并发和并行处理...
Scala的不可变集合包括`List`、`Set`和`Map`等。 2. **可变集合**:可变集合允许在运行时动态修改其内容,例如添加、删除元素等。虽然可变集合在某些场景下可能带来便利,但在多线程环境中应谨慎使用,以避免数据...
1. **RDD(弹性分布式数据集)**:Spark的核心抽象是RDD,它是不可变、分区的数据集合,可以在集群中进行并行计算。 2. **DataFrame/Dataset**:DataFrame提供了SQL-like API,而Dataset结合了DataFrame的易用性和...