Kotlin - 创建一个指定长度的随机整数的ArrayList?

Sus*_*ger 4 java kotlin

我有ArrayList这样的:

var amplititudes : ArrayList<Int> = ArrayList()
Run Code Online (Sandbox Code Playgroud)

我想用随机的Ints来填充它.我怎样才能做到这一点?

Md *_*lam 10

一种选择是使用数组构造函数如下:

var amplititudes  = IntArray(10) { Random().nextInt() }.asList()
Run Code Online (Sandbox Code Playgroud)

另一个策略是:

var amplititudes  = (1..10).map { Random().nextInt() }
Run Code Online (Sandbox Code Playgroud)

编辑

正如评论中所建议的,而不是Random每次创建一个实例,最好初始化一次:

var ran = Random()
var amplititudes  = (1..10).map { ran.nextInt() }
Run Code Online (Sandbox Code Playgroud)

  • 这样你就可以为每个元素创建一个新的`Random`实例,效率不高 (3认同)
  • 为了 202x 使用 Kotlin 1.5 及更高版本的读者的利益,@user2340612 的评论不再正确(事实上,我并不完全确定它曾经是正确的)。`Random` 是对 Random 的单个实例(声明为伴生对象)的引用,因此它不会创建新实例。 (2认同)

YCF*_*F_L 5

根据@Md Johirul Islam的回答,您还可以使用:

val from = 0
val to = 11
var random = Random()
var amplititudes  = IntArray(10) { random.nextInt(to - from) +  from }.asList()
Run Code Online (Sandbox Code Playgroud)

在此解决方案中,您可以指定所需的整数范围,例如从 0 到 10


Wil*_*zel 5

自 Kotlin 1.3 发布以来,无需使用 Java java.util.Random,这会将您的代码限制在 JVM 上。相反,kotlin.random.Random它被引入到所有支持 Kotlin 的平台上。

val amplititudes  = IntArray(10) { Random.nextInt() }.asList()
Run Code Online (Sandbox Code Playgroud)

由于您使用伴生对象,因此您无需担心Random每次迭代都会实例化一个对象(就像使用 Java 对象时您必须将其放入变量中一样)。