Do not use spread-operator when it causes excessive array copying
This commit is contained in:
@@ -43,7 +43,7 @@ public fun <K, V> emptyMap(): Map<K, V> = @Suppress("UNCHECKED_CAST") (EmptyMap
|
|||||||
*
|
*
|
||||||
* @sample samples.collections.Maps.Instantiation.mapFromPairs
|
* @sample samples.collections.Maps.Instantiation.mapFromPairs
|
||||||
*/
|
*/
|
||||||
public fun <K, V> mapOf(vararg pairs: Pair<K, V>): Map<K, V> = if (pairs.size > 0) linkedMapOf(*pairs) else emptyMap()
|
public fun <K, V> mapOf(vararg pairs: Pair<K, V>): Map<K, V> = if (pairs.size > 0) pairs.toMap(LinkedHashMap(mapCapacity(pairs.size))) else emptyMap()
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns an empty read-only map.
|
* Returns an empty read-only map.
|
||||||
@@ -123,7 +123,7 @@ public inline fun <K, V> linkedMapOf(): LinkedHashMap<K, V> = LinkedHashMap<K, V
|
|||||||
* @sample samples.collections.Maps.Instantiation.linkedMapFromPairs
|
* @sample samples.collections.Maps.Instantiation.linkedMapFromPairs
|
||||||
*/
|
*/
|
||||||
public fun <K, V> linkedMapOf(vararg pairs: Pair<K, V>): LinkedHashMap<K, V>
|
public fun <K, V> linkedMapOf(vararg pairs: Pair<K, V>): LinkedHashMap<K, V>
|
||||||
= LinkedHashMap<K, V>(mapCapacity(pairs.size)).apply { putAll(pairs) }
|
= pairs.toMap(LinkedHashMap(mapCapacity(pairs.size)))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Calculate the initial capacity of a map, based on Guava's com.google.common.collect.Maps approach. This is equivalent
|
* Calculate the initial capacity of a map, based on Guava's com.google.common.collect.Maps approach. This is equivalent
|
||||||
|
|||||||
@@ -26,6 +26,10 @@ package kotlin.comparisons
|
|||||||
*/
|
*/
|
||||||
public fun <T> compareValuesBy(a: T, b: T, vararg selectors: (T) -> Comparable<*>?): Int {
|
public fun <T> compareValuesBy(a: T, b: T, vararg selectors: (T) -> Comparable<*>?): Int {
|
||||||
require(selectors.size > 0)
|
require(selectors.size > 0)
|
||||||
|
return compareValuesByImpl(a, b, selectors)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun <T> compareValuesByImpl(a: T, b: T, selectors: Array<out (T)->Comparable<*>?>): Int {
|
||||||
for (fn in selectors) {
|
for (fn in selectors) {
|
||||||
val v1 = fn(a)
|
val v1 = fn(a)
|
||||||
val v2 = fn(b)
|
val v2 = fn(b)
|
||||||
@@ -84,8 +88,9 @@ public fun <T : Comparable<*>> compareValues(a: T?, b: T?): Int {
|
|||||||
* compare as equal, the result of that comparison is returned from the [Comparator].
|
* compare as equal, the result of that comparison is returned from the [Comparator].
|
||||||
*/
|
*/
|
||||||
public fun <T> compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator<T> {
|
public fun <T> compareBy(vararg selectors: (T) -> Comparable<*>?): Comparator<T> {
|
||||||
|
require(selectors.size > 0)
|
||||||
return object : Comparator<T> {
|
return object : Comparator<T> {
|
||||||
public override fun compare(a: T, b: T): Int = compareValuesBy(a, b, *selectors)
|
public override fun compare(a: T, b: T): Int = compareValuesByImpl(a, b, selectors)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user