我注意到Kotlin有两个内置方法reversed()和asReversed()
两者之间有什么区别吗?还是他们本质上只是在做完全相同的事情?
编辑:
我得到的两个答案基本上都只是复制粘贴我链接的文档所说的内容-但我仍然不明白其中的区别。他们似乎都只返回List<>
,它是原始文档的反向副本。
也许有人可以举一个例子说明彼此的行为方式不同吗?
答案 0 :(得分:5)
在Kotlin中,reverse和asReversed都有自己独特的功能。
反向功能返回一个列表,该列表具有反向的元素:顺序。
asReversed 函数返回原始列表的反向只读视图,即,原始列表中的所有更改都将反映在反向列表中。
两者之间的区别在于,一旦使用了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]
答案 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()
它仅适用于列表<> ,并返回原始列表的反向只读视图。在原始列表中所做的所有更改都会反映在相反的列表中。