Skip to content

Commit 5527607

Browse files
author
Vadzim Marchanka
committed
optimize mutable.TreeSet#{max, min}
1 parent 53e5d6b commit 5527607

File tree

2 files changed

+9
-2
lines changed

2 files changed

+9
-2
lines changed

library/src/scala/collection/immutable/TreeSet.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -150,15 +150,15 @@ final class TreeSet[A] private[immutable] (private[immutable] val tree: RB.Tree[
150150
override def init = new TreeSet(RB.delete(tree, lastKey))
151151

152152
override def min[A1 >: A](implicit ord: Ordering[A1]): A = {
153-
if ((ord eq ordering) && nonEmpty) {
153+
if ((ord == ordering) && nonEmpty) {
154154
head
155155
} else {
156156
super.min(ord)
157157
}
158158
}
159159

160160
override def max[A1 >: A](implicit ord: Ordering[A1]): A = {
161-
if ((ord eq ordering) && nonEmpty) {
161+
if ((ord == ordering) && nonEmpty) {
162162
last
163163
} else {
164164
super.max(ord)

library/src/scala/collection/mutable/TreeSet.scala

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,13 @@ sealed class TreeSet[A] private (tree: RB.Tree[A, Null])(implicit val ordering:
104104
override def last = RB.maxKey(tree).get
105105
override def lastOption = RB.maxKey(tree)
106106

107+
108+
override def min[B >: A](implicit cmp: Ordering[B]): A =
109+
if ((cmp == ordering) && nonEmpty) head else super.min(cmp)
110+
111+
override def max[B >: A](implicit cmp: Ordering[B]): A =
112+
if ((cmp == ordering) && nonEmpty) last else super.max(cmp)
113+
107114
override def foreach[U](f: A => U): Unit = RB.foreachKey(tree, f)
108115
override def clear(): Unit = RB.clear(tree)
109116

0 commit comments

Comments
 (0)