时间:2019-07-19 15:33:32

标签: kotlin

我注意到Kotlin有两个内置方法reversed()asReversed()

两者之间有什么区别吗?还是他们本质上只是在做完全相同的事情?

编辑:

我得到的两个答案基本上都只是复制粘贴我链接的文档所说的内容-但我仍然不明白其中的区别。他们似乎都只返回List<>,它是原始文档的反向副本。

也许有人可以举一个例子说明彼此的行为方式不同吗?

2 个答案:

答案 0 :(得分:5)

在Kotlin中,reverse和asReversed都有自己独特的功能。

反向功能返回一个列表,该列表具有反向的元素:顺序。

Reversed Function

asReversed 函数返回原始列表的反向只读视图,即,原始列表中的所有更改都将反映在反向列表中。

asReversed Function

两者之间的区别在于,一旦使用了asReversed()函数,原始列表中的任何更改也将反映在反向列表中。 但是,当使用reversed()函数时,相同的结果并不成立。它仅用于反转列表。

示例:

    val list = mutableListOf(0, 1, 2, 3, 4, 5)

    val asReversed = list.asReversed()
    val reversed   = list.reversed()

    println("Original list: $list")
    println("asReversed:    $asReversed")
    println("reversed:      $reversed")

    list[0] = 10

    println("Original list: $list")
    println("asReversed:    $asReversed")
    println("reversed:      $reversed")

输出

Original list: [0, 1, 2, 3, 4, 5]
asReversed:    [5, 4, 3, 2, 1, 0]
reversed:      [5, 4, 3, 2, 1, 0]
Original list: [10, 1, 2, 3, 4, 5]
asReversed:    [5, 4, 3, 2, 1, 10]
reversed:      [5, 4, 3, 2, 1, 0]

Try it online!

答案 1 :(得分:2)

根据文档

1。 reversed()

它仅返回列表(List <>),其中元素的顺序相反。

在不同对象(例如数组,列表等)上有该扩展名的多个定义

扩展名

数组<>

/**
 * Returns a list with elements in reversed order.
 */
public fun <T> Array<out T>.reversed(): List<T> {
    if (isEmpty()) return emptyList()
    val list = toMutableList()
    list.reverse()
    return list
}

列表<>

/**
 * Returns a list with elements in reversed order.
 */
public fun <T> Iterable<T>.reversed(): List<T> {
    if (this is Collection && size <= 1) return toList()
    val list = toMutableList()
    list.reverse()
    return list
}

2。 asReversed()

它仅适用于列表<> ,并返回原始列表的反向只读视图。在原始列表中所做的所有更改都会反映在相反的列表中。