在Kotlin宣布空集合

Roh*_*mar 6 kotlin

我怎样才能申报一个空的收集mapOf,listOfsetOf科特林

我在下面声明了变量:

val occupations = mapOf(Pair("Malcolm", "Captain"), Pair("Kaylee", "Mechanic"))
val shoppingList = listOf("catfish", "water", "tulips", "blue paint")
val favoriteGenres = setOf("Rock", "Classical", "Hip hop") 
Run Code Online (Sandbox Code Playgroud)

我想检查这些集合是否为空.

Ale*_*nov 21

我想检查这些集合是否为空.

你为什么不能简单地使用这个isEmpty()方法?

print(occupations.isEmpty())    // >>> false
print(shoppingList.isEmpty())   // >>> false
print(favoriteGenres.isEmpty()) // >>> false
Run Code Online (Sandbox Code Playgroud)

无论如何,如果你真的想要声明一个空集合,你可以这样做:

val emptyList = listOf<String>()
val emptySet = setOf<String>()
val emptyMap = mapOf<String, String>()
Run Code Online (Sandbox Code Playgroud)

要么

val emptyList = emptyList<String>()
val emptySet = emptySet<String>()
val emptyMap = emptyMap<String, String>()
Run Code Online (Sandbox Code Playgroud)

我们来看看引擎盖下.listOf()不带参数调用的方法具有以下实现:

/** Returns an empty read-only list.  The returned list is serializable (JVM). */
@kotlin.internal.InlineOnly
public inline fun <T> listOf(): List<T> = emptyList()
Run Code Online (Sandbox Code Playgroud)

很容易看出它只是调用另一种方法 - emptyList():

/** Returns an empty read-only list.  The returned list is serializable (JVM). */
public fun <T> emptyList(): List<T> = EmptyList
Run Code Online (Sandbox Code Playgroud)

返回一个名为的内部对象EmptyList:

internal object EmptyList : List<Nothing>, Serializable, RandomAccess {
    // <...>
}
Run Code Online (Sandbox Code Playgroud)

所以摘要是(正如@ brescia123所说)这些方法完全相同:它们都返回一个空的不可变List,由你来决定使用哪一个.

  • `listOf <String>()`和`emptyList <String>()`完全相同:第一个只调用第二个! (3认同)
  • "在第一种情况下,你会得到可变的收藏品" - 你确定它不是相反的吗? (2认同)

zsm*_*b13 5

您可以像这样创建空集合:

val occupations = mapOf<String, String>()
val shoppingList = listOf<String>()
val favoriteGenres = setOf<String>()
Run Code Online (Sandbox Code Playgroud)